在linux系统上找到所有与'name'匹配的文件,并用它们搜索'text'

时间:2010-09-24 11:31:11

标签: linux command-line find grep

我需要在linux系统上找到'filename.ext'的所有实例,看看哪些实例包含'lookingfor'文本。

是否有一组可用的linux命令行操作?

5 个答案:

答案 0 :(得分:29)

find / -type f -name filename.ext -exec grep -l 'lookingfor' {} +

使用+终止命令比\;更有效,因为find会将整批文件发送到grep,而不是逐个发送。{1}}这样可以避免找到每个单独文件的fork / exec。

前段时间我做了一些测试来比较xargs{} +{} \;的效果,我发现{} +更快。以下是我的一些结果:

time find . -name "*20090430*" -exec touch {} +
real    0m31.98s
user    0m0.06s
sys     0m0.49s

time find . -name "*20090430*" | xargs touch
real    1m8.81s
user    0m0.13s
sys     0m1.07s

time find . -name "*20090430*" -exec touch {} \;
real    1m42.53s
user    0m0.17s
sys     0m2.42s

答案 1 :(得分:6)

转到相应目录并键入以下命令。

  找到。 -name“* .ext”| xargs grep   'lookingfor'

答案 2 :(得分:3)

更简单的是,

find / -type f -name filename.ext -print0 | xargs -0 grep  'lookingfor'

-print0找到& 0到xargs可以缓解单个目录中大量文件的问题。

答案 3 :(得分:1)

尝试:

find / -type f -name filename.ext -exec grep -H -n 'lookingfor' {} \;

find以递归方式从根/开始搜索名为filename.ext的文件,对于每次发现的事件,它会在搜索lookingfor的文件名上运行grep,如果找到则打印行号(-n)和文件名(-H)。

答案 4 :(得分:0)

我发现以下命令是最简单的方法:

grep -R --include="filename.ext" lookingfor

或添加-i以搜索不区分大小写的内容:

grep -i -R --include="filename.ext" lookingfor