我需要在linux系统上找到'filename.ext'的所有实例,看看哪些实例包含'lookingfor'文本。
是否有一组可用的linux命令行操作?
答案 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