经过Google的几次搜索后,我想到的是:
find my_folder -type f -exec grep -l "needle text" {} \; -exec file {} \; | grep text
这非常不方便,并且会输出不需要的文本,例如mime类型信息。有更好的解决方案吗?我在同一文件夹中有很多图像和其他二进制文件,还有很多文本文件需要搜索。
我知道这是一个旧线程,但是我偶然发现了它,并认为我会分享我的方法,我发现这是一种非常快速的方法,可find用于仅查找非二进制文件:
find
find . -type f -exec grep -Iq . {} \; -print
-Igrep 的选项告诉它立即忽略二进制文件,而.连同的选项-q会使它立即与文本文件匹配,因此运行非常快。如果您担心空格,可以将其更改-print为-print0用于管道到xargs -0或之类的东西(感谢小费,@ lucas.werkmeister!)
-I
.
-q
-print
-print0
xargs -0
同样,仅对于某些BSD版本(find例如在OS X上)而言,第一个点才是必需的,但是如果您希望始终将其放置在别名或其他内容中,则不会一直伤害任何内容。
编辑 :正如@ruslan正确指出的那样,-and可以隐式使用。
-and