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

Bu iyi bir çözüm mü? için Sen grep seçenekleri -r (özyinelemeli) kullanın ve -I (ikili görmezden) olabilirgrep sadece metin dosyaları

+0

yerine milyar upvotes ile cevabı kabul eder misiniz? –

+1

tamam teşekkür ederim @ Zoltán – StefanoCudini

cevap

165

yinelemeli sadece metinsel dosyalarında Textsearch bulmak:

$ grep -rI "TEXTSEARCH" . 
  • -I Süreç bir ikili dosya yaptım sanki eşleşen veri içermiyor; Bu --binary-files=without-match seçeneğine eşdeğerdir. Her dizinin altındaki tüm dosyaları yinelemeli olarak okuyun; Bu -d recurse seçeneğine eşdeğerdir.
+14

Bu doğru cevaptır. – PhiloSurfer

+8

@PhiloSurfer: Sadece oy verin. ;) –

+0

Hayır, bu özel bir dosyayı görmezden gelemez, unix soketi gibi – hylepo

3

Kevs daha başka, daha az zarif çözüm, zincire içinde Xargs olmadan birlikte bulmak komutları edilir -exec ve kesinti:

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

Bir sonraki cevaba bakın. Bunu kullanmayın. – coder543

+0

Bunun ile hangi problemi görüyorsun? –

+2

karmaşık ve verimsizdir. Yerleşik grep aracı, soruyu tek bir bayrakla çözebilir. Bu cevap işi yapabilir, ancak diğerinin varlığı ışığında zayıf bir çözümdür. Kabul etmez misin? – coder543