2010-06-03 64 views
2

我有以下命令LINUX +文件中查找單詞目錄下,但很快

find /var -type f -exec grep "param1" {} \; -print 

使用此命令我可以找到任何文件中的參數1串在/ var

但時間,它需要因爲這很長。

我需要另一種可能的文件中查找字符串,但速度更快更然後我的例子

THX

耶爾

回答

9
grep -r "string" 

這一發現並不neccesary。

這是一個很好的鏈接,雖然過時了。

link text

此外,我認爲這屬於superuser.com

1
find /var -type f | xargs grep "param1" 

會稍微快一點(不產卵過程對每個文件)

grep -r "param1" /var 

會略多,所以我認爲。

+0

但如果文件太「太多」,這可能會導致問題。此外,最好相應地使用'-print0'和'-0',並添加'-n'以防止預覽可能的問題。 – ShinTakezou 2010-06-03 11:18:05

1

嘗試在大多數情況下也使用ack,即「better than grep」。其功能包括默認忽略典型垃圾文件(例如.svn或.git目錄,核心轉儲文件,備份文件),使用大量預定義文件類以及良好輸出格式的功能。

+0

我可以在哪裏下載ack? – yael 2010-06-03 10:57:59

+0

@yael:使用您的軟件包管理器(首選)安裝它,或者在** UncleZeiv **提供的鏈接下載它。 – 2010-06-03 14:45:04

+0

從發行版安裝時要小心,因爲通常會有另一個名爲「ack」的軟件包,與此無關。在Ubuntu中,你想'apt-get install ack-grep'。快樂acking :) – UncleZeiv 2010-06-03 14:58:35

2

查看grep命令的-l選項以提高速度。爲了加快find命令使用:

find ... -exec sh -c '...' arg0 '{}' + 


# grep ... -l: print files with matches, but stop scanning the file on the first match 
grep -lsr "param1" /var 

find /var -type f -exec sh -c 'grep -ls "param1" "[email protected]"' arg0 '{}' + 
find /var -type f -exec sh -c 'grep -ls "$0" "[email protected]"' "param1" '{}' + 
+0

對不起,但它不工作 find/var -type f -exec sh -c'grep -ls「$ 0」「$ @」'「param1」'{}'+ find:missing argument to' - EXEC」 – yael 2010-06-03 12:46:40

1

您可以使用定位的索引(如果你不依賴於所添加的文件/刪除)

grep "param1" $(locate -r '^/var') 
-1

一些命令優化是有幫助的,但是我通過掠奪200萬個文件獲得的最大速度是使用SSD硬盤。相同的查詢花了1/5的時間。