在谷歌搜索了几次之后,我想到了:
find my_folder -type f -exec grep -l "needle text" {} \; -exec file {} \; | grep text
这非常不方便,会输出不需要的文本,例如mime类型信息.有更好的解决方案吗?我在同一个文件夹中有很多图像和其他二进制文件,还有很多需要搜索的文本文件.
在谷歌搜索了几次之后,我想到了:
find my_folder -type f -exec grep -l "needle text" {} \; -exec file {} \; | grep text
这非常不方便,会输出不需要的文本,例如mime类型信息.有更好的解决方案吗?我在同一个文件夹中有很多图像和其他二进制文件,还有很多需要搜索的文本文件.
我知道这是一个旧的线程,但我偶然发现了它,并认为我应该分享我的方法,我发现这是一种非常快速的方法,使用find
只查找非二进制文件:
find . -type f -exec grep -Iq . {} \; -print
grep的-I
选项告诉它立即忽略二进制文件,.
选项和-q
选项将使它立即匹配文本文件,因此速度非常快.如果你关心空间的话,可以把-print
换成-print0
,把管道换成xargs -0
之类的(谢谢你的提示,@lucas.werkmeister!)
此外,第一个点仅在某些BSD版本的find
上是必需的,比如在OS X上,但如果你想把它放在别名或其他东西中,一直放在那里并不会有任何影响.
EDIT:正如@ruslan正确指出的,-and
可以省略,因为它是隐含的.