LINUX +文件中查找单词目录下,但很快

问题描述:

我有以下命令LINUX +文件中查找单词目录下,但很快

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

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

但时间,它需要因为这很长。

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

THX

耶尔

grep -r "string" 

这一发现并不neccesary。

这是一个很好的链接,虽然过时了。

link text

此外,我认为这属于superuser.com

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

会稍微快一点(不产卵过程对每个文件)

grep -r "param1" /var 

会略多,所以我认为。

+0

但如果文件太“太多”,这可能会导致问题。此外,最好相应地使用'-print0'和'-0',并添加'-n'以防止预览可能的问题。 – ShinTakezou 2010-06-03 11:18:05

尝试在大多数情况下也使用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

查看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

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

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

一些命令优化是有帮助的,但是我通过掠夺200万个文件获得的最大速度是使用SSD硬盘。相同的查询花了1/5的时间。