2012-02-28 17 views
8

Belirli bir dizeyi içeren bazı dosyalarım var. Ne yapmak istediğim, dosya için bir yer aramak; dosya desen için grep varsa; eğer doğruysa, bir şeyler yap.xargs - koşul ve eko varsa {}

find -iname file.xxx| xargs -I {} if grep -Fq "string" {} ; then echo {} ; fi 

sorunlar şunlardır:

  • xargs eğer deyimi ile çalışmıyor.
  • echo {} dosya adını vermez, bunun yerine {} verir.

Bunları nasıl düzeltirim?

+0

Neden 'find' koşmak' yok kendisini grep'? –

+0

Dosyada veya grepping hattında bir şey mi yapıyorsunuz? –

cevap

18

Böyle bir kabuk yoluyla komutu çalıştırmak için deneyin: Orijinal komut tırnak ve bash -c çevrili olan

$ find -iname file.xxx | 
> xargs -I {} bash -c 'if grep -Fq "string" {} ; then echo {} ; fi' 

.

5

Wrap sh bir çağrı if-ifadesi:

find -iname file.xxx | xargs -I {} sh -c 'grep -Fq "string" {} && { echo {}; }' 

kullanın bir süre döngü yerine Xargs

find -iname file.xxx | while read -r file; do 
    if grep -Fq "$file"; then 
    # do something 
    echo "$file" 
    fi 
done 

Sana dosya echo daha fazlasını yapmak istiyoruz varsayalım.

find -iname file.xxx | xargs grep -Fl "string" 
0

Birincisi, if bir bash-komuta ve hiçbir çalıştırılabilir bir programdır: Eğer yapmak için çalışıyoruz hepsi bu kadarsa, grep en -l seçeneğini kullanın. xargs ise farklı bir program gerektirir.

İkinci olarak, ; karakterleri büyük olasılıkla komutunuzu böler. Onları xargs'a götürmek için onlardan kaçmak zorunda kalacaksın. Aşağıdaki Önerim tüm Bunu önlemek için

:

for i in `find -iname file.xxx` ; do grep -Fq "string" $i && echo $i ; done 
+2

Genel olarak, bir for-loop kullanmak, kelime-parça isimlerinin çıkışlarla çıktısı nedeniyle boşluklarla bölünmez. Dosya adlarını okumak için bir while döngüsü kullanmak daha iyidir. –

+0

İyi nokta. Her zaman boşluklardan sakının! – Quota

-1
find -iname file.xxx | while read FILE; do 
if grep -Fq "string" $FILE ; then echo $FILE ; 
done 
+0

Bu yanıt, uzunluğu ve içeriği nedeniyle düşük kaliteli olarak işaretlendi. Ne yaptığı ve nasıl bir soruya cevap verdiği ile ilgili bir açıklama eklemeyi önerin. –