grep只有文本文件

时间:2012-03-21 14:47:05

标签: bash grep

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

这是一个很好的解决方案吗?仅在文本文件中递归查找TEXTSEARCH

3 个答案:

答案 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" *