2012-03-21 45 views
40
find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {} 

這是一個很好的解決方案嗎?爲找到TEXTSEARCH遞歸僅文本文件僅grep文本文件

+0

請您接受數十億upvotes,而不是答案嗎? – 2015-04-15 10:27:02

+1

好的,謝謝@Zoltán – StefanoCudini 2015-04-15 19:26:53

回答

165

可以在grep使用-r(遞歸)和-I(忽略二進制)選項:

$ grep -rI "TEXTSEARCH" . 
  • -I處理的二進制文件,就好像它沒有不包含匹配數據;這相當於--binary-files=without-match選項。
  • -r遞歸讀取每個目錄下的所有文件;這相當於-d recurse選項。
+14

這是正確的答案。 – PhiloSurfer 2012-11-29 20:07:54

+8

@PhiloSurfer:只需投票。 ;) – 2013-06-25 22:49:19

+0

不,這個不能忽略特殊文件,就像unix socket – hylepo 2014-12-25 08:21:27

3

另外,比kevs不太優雅的解決方案,就是以連鎖-exec命令中發現一起,沒有xargs的切:

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

看下一個答案。不要使用這個。 – coder543 2013-06-24 14:42:05

+0

你看到了這個問題? – 2013-06-25 16:17:13

+2

這是複雜而低效的。內置的grep工具能夠用單個標誌解決問題。這個答案可以完成這項工作,但是鑑於另一個人的存在,這是一個糟糕的解決方案。你不同意嗎? – coder543 2013-06-25 19:15:54