xargs विशेष रूप से तब उपयोगी होता है जब आपके पास स्टडिन पर फ़ाइलपथ की सूची होती है और उनके साथ कुछ करना चाहते हैं। उदाहरण के लिए:
$ git ls-files "*.tex" | xargs -n 1 sed -i "s/color/colour/g"
आइए इस कदम की जाँच करें:
$ git ls-files "*.tex"
tex/ch1/intro.tex
tex/ch1/motivation.tex
....
दूसरे शब्दों में, हमारा इनपुट उन रास्तों की सूची है, जिन्हें हम कुछ करना चाहते हैं।
इन रास्तों से xargs क्या करता है, यह जानने के लिए, echo
आपकी आज्ञा से पहले एक अच्छी चाल जोड़ी जानी चाहिए , जैसे:
$ git ls-files "*.tex" | xargs -n 1 echo sed -i "s/color/colour/g"
sed -i "s/color/colour/g" tex/ch1/intro.tex
sed -i "s/color/colour/g" tex/ch1/motivation.tex
....
-n 1
तर्क xargs अपने आप में एक आदेश में प्रत्येक पंक्ति बारी कर देगा। sed -i "s/color/colour/g"
आदेश की सभी घटनाओं का स्थान ले लेगा color
साथ colour
निर्दिष्ट फ़ाइल के लिए।
ध्यान दें कि यह केवल तभी काम करता है जब आपके रास्तों में कोई स्थान न हो। यदि आप करते हैं, तो आपको -0
ध्वज को पास करके xargs में इनपुट के रूप में अशक्त समाप्ति पथ का उपयोग करना चाहिए । एक उदाहरण उपयोग होगा:
$ git ls-files -z "*.tex" | xargs -0 -n 1 sed -i "s/color/colour/g"
जो जैसा हमने ऊपर वर्णित किया है, वैसा ही होता है, लेकिन यह भी काम करता है कि क्या किसी एक पथ में एक स्थान है।
यह किसी भी कमांड के साथ काम करता है जो उत्पादन के रूप में फाइलनेम का उत्पादन करता है जैसे find
या locate
। यदि आप इसे बहुत सारी फ़ाइलों के साथ गिट रिपॉजिटरी में उपयोग करने के लिए करते हैं, हालांकि, इसके git grep -l
बजाय इसका उपयोग करना अधिक कुशल हो सकता है git ls-files
, जैसे:
$ git grep -l "color" "*.tex" | xargs -n 1 sed -i "s/color/colour/g"
git grep -l "color" "*.tex"
आदेश "* .tex" वाक्यांश "रंग" वाली फ़ाइलों की एक सूची दे देंगे।
xargs
और$(...)
) पर एक स्ट्रीम प्राप्त करने के लिए दो सामान्य विकल्पों में से , xargs कमांड प्रतिस्थापन से कहीं अधिक सुरक्षित है। और मैं कभी भी इसमें एक नई रेखा के साथ एक वैध फ़ाइल नाम याद नहीं कर सकता। भागने और शब्द विस्तार के मुद्दे कमांड प्रतिस्थापन के साथ नहीं हैं, न कि xargs?