2012-02-28 18 views
8

मेरे पास कुछ फ़ाइलें हैं जिनमें एक विशेष तार शामिल है। मैं क्या करना चाहता हूं, फ़ाइल के लिए एक स्थान खोजें; अगर फ़ाइल पैटर्न के लिए grep मौजूद है; यदि सच है, तो कुछ करो।xargs - यदि स्थिति और गूंज {}

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

समस्याएं हैं:

  • xargs अगर बयान के साथ काम नहीं कर रहा।
  • echo {} फ़ाइल नाम नहीं देता है, इसके बजाय {} देता है।

मैं इन्हें कैसे ठीक करूं?

+0

क्यों 'find' रन' नहीं ही grep'? –

+0

फ़ाइल या grepped लाइन पर कुछ करो? –

उत्तर

18

इस तरह एक खोल के माध्यम से आदेश को चलाने के लिए प्रयास करें:

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

जहां मूल आदेश उद्धरण और bash -c से घिरा हुआ है।

5

लपेटें श के लिए एक कॉल में अगर बयान:

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

उपयोग थोड़ी देर के पाश के बजाय xargs

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

मुझे लगता है आप फ़ाइल नाम गूंज से भी अधिक करना चाहते हैं। अगर वह तुम सब करने की कोशिश कर रहे हैं, का उपयोग ग्रेप के -l विकल्प:

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

पहले, if एक bash-कमान और कोई निष्पादन योग्य कार्यक्रम है। दूसरी ओर xargs एक अलग कार्यक्रम की जरूरत है।

दूसरा, ; वर्ण शायद आपके आदेश को विभाजित कर रहे हैं। उन्हें xargs के लिए throu पाने के लिए उन्हें बचाना होगा।

यह सब मेरा सुझाव से बचने के लिए निम्नलिखित:

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

सामान्य रूप से, फॉर-लूप का उपयोग करने की अनुशंसा नहीं की जाती है क्योंकि यह शब्द के आउटपुट को विभाजित करता है - रिक्त स्थान वाले फ़ाइल नाम विभाजित किए जाएंगे। फ़ाइल नाम पढ़ने के लिए थोड़ी देर के लिए लूप का उपयोग करना बेहतर है। –

+0

अच्छा बिंदु। हमेशा रिक्त स्थान से सावधान रहें! – Quota

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

यह उत्तर इसकी लंबाई और सामग्री के कारण कम गुणवत्ता वाले के रूप में चिह्नित किया गया था। इसका वर्णन करने का सुझाव दें कि यह क्या करता है और यह प्रश्न का उत्तर कैसे देता है। –

संबंधित मुद्दे