उदाहरण "xargs" कमांड का उपयोग करता है

विवरण और परिचय

Xargs कमांड आमतौर पर कमांड लाइन में प्रयोग किया जाता है जहां एक कमांड का आउटपुट इनपुट कमांड के रूप में किसी अन्य कमांड पर पास किया जाता है।

कई मामलों में, इसे पूरा करने के लिए xargs जैसे कोई विशेष आदेश की आवश्यकता नहीं होती है, क्योंकि "पाइप" और "पुनर्निर्देशन" ऑपरेटर एक ही प्रकार के लेन-देन करते हैं। हालांकि, कभी-कभी मूल पाइपिंग और रीडायरेक्शन तंत्र के साथ समस्याएं होती हैं, उदाहरण के लिए, यदि तर्कों में रिक्त स्थान होते हैं, तो यह xargs खत्म हो जाता है।

इसके अतिरिक्त, यदि आवश्यक हो, तो xargs निर्दिष्ट आदेश को बार-बार निष्पादित करता है, इसे दिए गए सभी तर्कों को संसाधित करने के लिए। वास्तव में, आप निर्दिष्ट कर सकते हैं कि जब भी xargs निर्दिष्ट कमांड निष्पादित करता है तो मानक इनपुट स्ट्रीम से कितने तर्क पढ़ा जाना चाहिए।

सामान्य रूप से, xargs कमांड का उपयोग किया जाना चाहिए यदि एक कमांड का आउटपुट विकल्पों के भाग के रूप में उपयोग किया जाता है या दूसरे कमांड के तर्क के लिए उपयोग किया जाता है जिस पर डेटा स्ट्रीम किया जाता है (पाइप ऑपरेटर "|" का उपयोग करके)। यदि डेटा दूसरे आदेश के (मानक) इनपुट होने का इरादा है तो नियमित पाइपिंग पर्याप्त है।

उदाहरण के लिए, यदि आप फ़ाइल नामों और निर्देशिकाओं की सूची उत्पन्न करने के लिए ls कमांड का उपयोग करते हैं, और फिर इस सूची को echo निष्पादित xargs कमांड में पाइप करें, तो आप निर्दिष्ट कर सकते हैं कि प्रत्येक पुनरावृत्ति पर प्रतिबिंबित करके कितने फ़ाइल नाम या निर्देशिका नाम संसाधित होते हैं :

एलएस | xargs -n 5 गूंज

इस मामले में, गूंज एक समय में पांच फ़ाइल या निर्देशिका नाम प्राप्त करता है। चूंकि गूंज अंत में एक नया रेखा वर्ण जोड़ता है, इसलिए प्रत्येक पंक्ति पर पांच नाम लिखे जाते हैं।

यदि आप एक कमांड निष्पादित करते हैं जो एक बड़ी और अप्रत्याशित संख्या आइटम (जैसे फ़ाइल नाम) देता है जो आगे की प्रक्रिया के लिए किसी अन्य कमांड पर पास किया जाता है, तो यह अधिक अच्छा है कि अधिकतम आदेश को ओवरलोड और क्रैशिंग से बचने के लिए प्राप्त होने वाले तर्कों की अधिकतम संख्या को नियंत्रित करना एक अच्छा विचार है।

निम्न कमांड लाइन cp कमांड पर पारित होने से पहले 200 के समूहों को int द्वारा उत्पादित फ़ाइल नामों की धारा को विभाजित करती है, जो उन्हें बैकअप निर्देशिका में कॉपी करती है।

ढूंढें ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

खोज कमांड में "./" तत्व खोज के लिए वर्तमान निर्देशिका निर्दिष्ट करता है। "-type f" तर्क फ़ाइलों को खोज को प्रतिबंधित करता है, और "-name" * .txt "ध्वज आगे किसी भी चीज़ को फ़िल्टर करता है जिसमें" .txt "एक्सटेंशन नहीं होता है। Xis में -i ध्वज संकेत देता है कि { } नोटेशन भाप के प्रत्येक फ़ाइल नाम का प्रतिनिधित्व करता है।

निम्न आदेश निर्देशिका / tmp में या नीचे कोर नाम की फ़ाइलों को पाता है और उन्हें हटा देता है।

कोर / टाइप f -print | ढूंढें / tmp -name | xargs / बिन / आरएम-एफ

ध्यान दें कि अगर न्यूलाइन, सिंगल या डबल कोट्स या रिक्त स्थान वाले कोई फ़ाइल नाम हैं तो यह गलत तरीके से काम करेगा। निम्न संस्करण फ़ाइल नामों को इस तरह से संसाधित करता है कि एकल या डबल कोट्स, रिक्त स्थान या न्यूलाइन वाली फ़ाइल या निर्देशिका नाम सही तरीके से संभाले जाते हैं।

ढूंढें / tmp -name कोर-टाइप f -print0 | xargs -0 / bin / rm -f

-i विकल्प के बजाय आप -I ध्वज का भी उपयोग कर सकते हैं जो स्ट्रिंग को निर्दिष्ट करता है जिसे कमांड तर्क में इनपुट लाइन द्वारा प्रतिस्थापित किया गया है जैसा कि इस उदाहरण में है:

एलएस डीआईआर 1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

प्रतिस्थापन स्ट्रिंग को "{}" के रूप में परिभाषित किया गया है। इसका मतलब है, कमांड तर्कों में "{}" की किसी भी घटना को पाइप ऑपरेशन के माध्यम से तर्क देने के लिए अग्रेषित इनपुट तत्व द्वारा प्रतिस्थापित किया जाता है। यह आपको आदेश के तर्कों (बार-बार) निष्पादित करने के तर्कों में विशिष्ट स्थितियों पर इनपुट तत्वों को रखने में सक्षम बनाता है।