我可以搜索树中的所有文本文件(但不能搜索二进制文件)中的某个字符串

Joh*_*den 6 unix bash shell grep find

到目前为止我最好的镜头是(用于在包含大型C程序的目录中查找字符串)

find ~/example_directory -type f \( -name "*.mk" -or -name "*.[sch]" \) -print0 | xargs -0 -e grep "example_string"
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,但它依赖于.mk makefile,.c或.h源文件和.s汇编程序文件中的所有有趣内容.

我正在考虑添加诸如"所有名为Makefile的文件"或"所有*.py python脚本"之类的内容,但如果有某种方法告诉find只查找文本文件,那就更容易了.

如果你只是在所有文件上运行grep,它需要很长时间,并且你会在目标文件上获得大量无趣的点击.

evi*_*tto 11

GNU grep支持该-I选项,它使得它处理二进制文件(通过查看前几个字节确定)就好像它们不匹配一样,因此基本上它们被跳过.


Phi*_*llo 6

grep -rI <path> <pattern>
Run Code Online (Sandbox Code Playgroud)

'-r'开关使grep递归,'-I'使它忽略二进制文件.

还有其他开关可以排除某些文件和目录(我经常这样做以排除svn元数据,例如)