只包含 grep 文本文件

find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {}

这是一个很好的解决方案? 为寻找文本搜索递归只在文本文件

53782 次浏览

您可以在 grep中使用 -r(递归)和 -I(忽略二进制)选项:

$ grep -rI "TEXTSEARCH" .
  • 处理一个二进制文件,就好像它不包含匹配的数据一样; 这等同于 --binary-files=without-match选项。
  • 递归地读取每个目录下的所有文件; 这相当于 -d recurse选项。

另一个不如 kevs 优雅的解决方案是,链式执行命令在 find 中一起使用,不使用 xargs 和 cut:

find . -type f -exec bash -c "file -bi {} | grep -q text" \; -exec grep TEXTSEARCH {} ";"

如果您知道要搜索的文件扩展名是什么,那么有一种非常简单的方法来搜索所有 * 。当前目录中的 txt 文件,递归地遍历所有子目录,不区分大小写:

grep -ri --include=*.txt "sometext" *