find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {}
这是一个很好的解决方案吗?仅在文本文件中递归查找TEXTSEARCH
答案 0 :(得分:192)
您可以使用-r
中的-I
(递归)和grep
(忽略二进制)选项:
$ grep -rI "TEXTSEARCH" .
-I
处理二进制文件,就像它不包含匹配数据一样;这相当于--binary-files=without-match
选项。-r
递归地读取每个目录下的所有文件;这相当于-d recurse
选项。
答案 1 :(得分:5)
另一个比kev更不优雅的解决方案是,将find -exec命令放在一起查找,而不用xargs和cut:
find . -type f -exec bash -c "file -bi {} | grep -q text" \; -exec grep TEXTSEARCH {} ";"
答案 2 :(得分:2)
如果您知道要搜索的文件扩展名,那么这是一种非常简单的方法,它通过所有子目录递归地从当前目录中搜索所有* .txt文件,不区分大小写:
grep -ri --include=*.txt "sometext" *