कई कमांड के साथ xargs


6

मैं एक-एक करके फाइलों की सूची में कमांड के अनुक्रम को निष्पादित करने की कोशिश कर रहा हूं। मैं सोच रहा था कि क्या xargs का उपयोग करना संभव है

ls *.txt | xargs -n 1 -I {} cat {} | grep foo > {}.foo

कहाँ पे

cat {} | grep foo > {}.foo

वह कमांड है जिसे मैं प्रत्येक फाइल पर निष्पादित करना चाहता हूं।

जवाबों:


7

की तर्ज पर कुछ का उपयोग करना संभव हो सकता है

xargs -n1 -I[] sh -c 'cat {} | grep foo > {}.foo'

या, बेकार से छुटकारा पाने के लिए cat

xargs -n1 -I{} sh -c 'grep foo {} > ().foo'

आमतौर पर इसे शेल स्क्रिप्ट में रखना आसान होता है ताकि आप इसे फाइल पास कर सकें।

cat > fiddle.sh <<\EOF
for f in "$@"; do
  grep foo "$f" >"$f.foo"
done
EOF
ls *.txt | xargs sh fiddle.sh    # note we can now pass multiple files, no -n1 or -I needed

पैदल सेना: lsविशेष वर्णों के साथ सही काम नहीं करेगी, विशेष रूप से नए नाम, फिल्नाम में एम्बेडेड। मैं xargsपूरी तरह से डंप करूँगा , और (उपरोक्त स्क्रिप्ट को देखते हुए) बस करो

sh fiddle.sh *.txt

या और भी

for f in *.txt; do grep foo "$f" >"$f.txt"; done

प्रॉम्प्ट पर सही।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.