linux+;在目录下的文件中快速查找word

linux+;在目录下的文件中快速查找word,linux,bash,Linux,Bash,我有以下命令 find /var -type f -exec grep "param1" {} \; -print 使用此命令,我可以在/var下的任何文件中找到param1字符串 但这需要很长时间 我需要在文件中找到字符串的其他可能性,但比我的示例快得多 THX 亚尔 这个发现不是必需的 这是一个很好的链接,尽管已经过时了 我还认为这应该放在superuser.com上 find /var -type f | xargs grep "param1" 会稍微快一点(没有为每个文件生成

我有以下命令

find /var  -type f -exec grep "param1" {} \; -print
使用此命令,我可以在/var下的任何文件中找到param1字符串

但这需要很长时间

我需要在文件中找到字符串的其他可能性,但比我的示例快得多

THX

亚尔

这个发现不是必需的

这是一个很好的链接,尽管已经过时了

我还认为这应该放在superuser.com上

find /var -type f  | xargs grep "param1" 
会稍微快一点(没有为每个文件生成进程)


我想会稍微多一点。

尝试使用ack,在大多数情况下是“”。它的功能包括默认情况下忽略典型垃圾文件(如.svn或.git目录、核心转储文件、备份文件)、使用大量预定义文件类的能力、良好的输出格式。

查看grep命令的-l选项以提高速度。要加快“查找”命令的速度,请使用:

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" "$@"' arg0 '{}' +
find /var -type f -exec sh -c 'grep -ls "$0" "$@"' "param1" '{}' +

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


其中一些命令优化是有帮助的,但我从放大200万个文件中获得的最大速度提升是使用SSD硬盘驱动器。同样的查询花费了1/5的时间。

我可以在哪里下载ack?@yael:使用您的软件包管理器(首选)安装它,或者从Uncleziv方便提供的链接下载。从您的发行版安装它时要小心,因为周围经常有另一个名为“ack”的软件包,这与此无关。在Ubuntu中,你想
apt获得安装确认grep
。Happy acking:)但是如果文件“太多”,这可能会导致问题。此外,最好相应地使用
-print0
-0
,并添加
-n
,以防止预览可能出现的问题。很抱歉,find/var-type f-exec sh-c'grep-ls“$0”“$@”'param1“{}”+find:find-exec缺少参数
grep -r "param1" /var 
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" "$@"' arg0 '{}' +
find /var -type f -exec sh -c 'grep -ls "$0" "$@"' "param1" '{}' +
grep "param1" $(locate -r '^/var')