一尘不染

Linux命令:如何仅查找文本文件?

linux

经过Google的几次搜索后,我想到的是:

find my_folder -type f -exec grep -l "needle text" {} \; -exec file {} \; | grep text

这非常不方便,并且会输出不需要的文本,例如mime类型信息。有更好的解决方案吗?我在同一文件夹中有很多图像和其他二进制文件,还有很多文本文件需要搜索。


阅读 507

收藏
2020-06-02

共1个答案

一尘不染

我知道这是一个旧线程,但是我偶然发现了它,并认为我会分享我的方法,我发现这是一种非常快速的方法,可find用于仅查找非二进制文件:

find . -type f -exec grep -Iq . {} \; -print

-Igrep
的选项告诉它立即忽略二进制文件,而.连同的选项-q会使它立即与文本文件匹配,因此运行非常快。如果您担心空格,可以将其更改-print-print0用于管道到xargs -0或之类的东西(感谢小费,@ lucas.werkmeister!)

同样,仅对于某些BSD版本(find例如在OS X上)而言,第一个点才是必需的,但是如果您希望始终将其放置在别名或其他内容中,则不会一直伤害任何内容。

编辑 :正如@ruslan正确指出的那样,-and可以隐式使用。

2020-06-02