अधिक अनुभवी उपयोगकर्ताओं के लिए, हम टर्मिनल पर स्मार्टर काम करने के नए तरीके खोजने के लिए हमेशा देख रहे हैं, न कि हार्डर। xargs एक उपयोगी कमांड है जो दो कमांड के बीच एक पुल के रूप में कार्य करता है, एक के आउटपुट को पढ़ता है और पढ़े गए आइटम के साथ दूसरे को निष्पादित करता है। कमांड का उपयोग आमतौर पर उन परिदृश्यों में किया जाता है जब कोई उपयोगकर्ता किसी पैटर्न की खोज कर रहा होता है, फ़ाइलों को हटा और नाम बदल रहा होता है, और बहुत कुछ। यहां हम आपको दिखाते हैं कि अपने लाभ के लिए xargs कमांड का उपयोग कैसे करें।
xargs क्या है?
अपने मूल रूप में, xargs मानक इनपुट (या STDIN) से जानकारी पढ़ता है और पढ़े गए आइटम के साथ एक कमांड को एक या अधिक बार निष्पादित करता है। कई सरल प्रदर्शन हैं, लेकिन यहां एक है जो दिखाता है कि मेरा क्या मतलब है।
मेरे Documents फ़ोल्डर पर xargs से ls कमांड निष्पादित करवाने के लिए, मैं निम्न कमांड चलाऊंगा:
echo "Documents" | xargs ls
पाइप कैरेक्टर | उस चीज़ को पाइप कर रहा है जो उससे पहले आती है xargs के लिए STDIN के रूप में।
आप देख सकते हैं कि xargs मेरे Documents फ़ोल्डर को बिना किसी समस्या के पढ़ता है। यह xargs कमांड की क्षमताओं का सिर्फ एक उदाहरण है।
जबकि xargs कमांड का उपयोग विभिन्न कमांड लाइन ऑपरेशन में किया जा सकता है, यह find कमांड के साथ उपयोग किए जाने पर वास्तव में काम आता है। इस लेख में, हम कुछ उपयोगी उदाहरणों पर चर्चा करते हैं ताकि यह समझ सकें कि xargs और find का एक साथ उपयोग कैसे किया जा सकता है।
एकाधिक फ़ाइलों से जुड़े ऑपरेशन
मान लीजिए आप "ref.txt" की सामग्री को एक निर्देशिका में मौजूद सभी टेक्स्ट फ़ाइलों में कॉपी करना चाहते हैं। जबकि कार्य के लिए अन्यथा आपको कई कमांड निष्पादित करने की आवश्यकता हो सकती है, xargs कमांड, find कमांड के साथ, इसे सरल बनाता है। मेरे पास कुछ टेस्ट निर्देशिकाएं हैं। एक में "test0.txt" है, जिसमें टेक्स्ट है, और दूसरी निर्देशिका में टेक्स्ट के बिना 10 अन्य टेस्ट फ़ाइलें हैं। यदि मैं test0.txt की सामग्री लेना चाहता हूं और उसे अन्य निर्देशिकाओं में बाकी टेक्स्ट फ़ाइलों में कॉपी करना चाहता हूं, तो मैं निम्न कमांड चलाऊंगा:
find ./test-dir1/ -name "*.txt" | xargs -n1 cp test0.txt
ऊपर दिखाए गए कमांड को समझने के लिए, आइए इसे दो भागों में विभाजित करें।
पहला भाग find ./test-dir1/ -name "*.txt" है, जो "test-dir1" निर्देशिका में मौजूद सभी .txt फ़ाइलों को खोजता है। आप यहां कोई भी निर्देशिका निर्दिष्ट कर सकते हैं।
दूसरा भाग, xargs -n1 cp test.txt, पहले कमांड के आउटपुट (परिणामी फ़ाइल नाम) को लेगा और इसे एक-एक करके cp (कॉपी) कमांड को सौंप देगा। ध्यान दें कि -n विकल्प यहां महत्वपूर्ण है, क्योंकि यह xargs को प्रति निष्पादन एक तर्क का उपयोग करने का निर्देश देता है।
जब एक साथ जोड़ा जाता है, तो पूरा कमांड "test0.txt" की सामग्री को निर्देशिका में सभी .txt फ़ाइलों में कॉपी कर देगा।
बड़ी संख्या में तर्कों से जुड़े ऑपरेशन
xargs का उपयोग करने के प्रमुख लाभों में से एक बड़ी संख्या में तर्कों को संभालने की इसकी क्षमता है। उदाहरण के लिए, एक बार में बड़ी संख्या में फ़ाइलों को हटाते समय, rm कमांड कभी-कभी "अर्गुमेंट लिस्ट टू लॉन्ग" त्रुटि के साथ विफल हो जाएगा। ऐसा इसलिए है क्योंकि यह तर्कों की इतनी लंबी सूची को संभाल नहीं सका। यह आमतौर पर तब होता है जब आप जिस फ़ोल्डर को हटाना चाहते हैं उसमें बहुत सारी फ़ाइलें होती हैं।
मान लीजिए आपके पास 75 PDF हैं और आप उन्हें हटाने का प्रयास करते समय त्रुटि प्राप्त कर रहे हैं।
इसे xargs से आसानी से ठीक किया जा सकता है। इन सभी फ़ाइलों को हटाने के लिए, निम्न कमांड का उपयोग करें:
find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -f
पैटर्न खोज से जुड़े ऑपरेशन
सॉफ्टवेयर डेवलपर्स के साथ-साथ सिस्टम एडमिनिस्ट्रेटर कमांड लाइन पर काम करते समय बहुत पैटर्न खोज करते हैं। उदाहरण के लिए, एक डेवलपर उन प्रोजेक्ट फ़ाइलों पर एक त्वरित नज़र डालना चाह सकता है जो किसी विशेष वेरिएबल को संशोधित करती हैं, या एक सिस्टम एडमिनिस्ट्रेटर उन फ़ाइलों को देखना चाह सकता है जो किसी विशेष सिस्टम कॉन्फ़िगरेशन पैरामीटर का उपयोग करती हैं। इन परिदृश्यों में, xargs, find और grep के साथ, आपके लिए चीजें आसान बनाता है।
उदाहरण के लिए, "maketecheasier" स्ट्रिंग वाली सभी ".txt" फ़ाइलों को खोजने के लिए, निम्न कमांड चलाएं:
find ./ -name "*.txt" | xargs grep "maketecheasier"
यहां मेरे सिस्टम पर कमांड द्वारा उत्पादित आउटपुट है।
कट/कॉपी ऑपरेशन
Xargs, find कमांड के साथ, फ़ाइलों के एक सेट को एक निर्देशिका से दूसरी में कॉपी या स्थानांतरित करने के लिए भी उपयोग किया जा सकता है। उदाहरण के लिए, वर्तमान निर्देशिका से पिछली निर्देशिका में 10 मिनट से अधिक पुरानी सभी टेक्स्ट फ़ाइलों को स्थानांतरित करने के लिए, निम्न कमांड का उपयोग करें:
find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../
-I कमांड लाइन विकल्प xargs कमांड द्वारा एक रिप्लेस-स्ट्रिंग को परिभाषित करने के लिए उपयोग किया जाता है जो find कमांड के आउटपुट से पढ़े गए नामों से बदल जाता है। यहां रिप्लेस-स्ट्रिंग {} है, लेकिन यह कुछ भी हो सकता है। उदाहरण के लिए, आप "file" को रिप्लेस-स्ट्रिंग के रूप में उपयोग कर सकते हैं।
find . -name "*.txt" -mmin 10 | xargs -n1 -I 'file' mv 'file' ./practice
xargs को कब रुकना है यह कैसे बताएं
मान लीजिए आप वर्तमान निर्देशिका में मौजूद सभी .txt फ़ाइलों का विवरण सूचीबद्ध करना चाहते हैं। जैसा कि पहले ही समझाया गया है, इसे निम्न कमांड का उपयोग करके आसानी से किया जा सकता है:
find . -name "*.txt" | xargs ls -l
लेकिन एक समस्या है: xargs कमांड ls कमांड को निष्पादित करेगा भले ही find कमांड किसी .txt फ़ाइल को खोजने में विफल रहता है। निम्न एक उदाहरण है।
तो आप देख सकते हैं कि निर्देशिका में कोई .txt फ़ाइलें नहीं हैं, लेकिन इसने xargs को ls कमांड निष्पादित करने से नहीं रोका। इस व्यवहार को बदलने के लिए, -r कमांड लाइन विकल्प का उपयोग करें:
find . -name "*.txt" | xargs -r ls -l
निष्कर्ष
हालांकि मैंने यहां find के साथ xargs का उपयोग करने पर ध्यान केंद्रित किया है, यह कई अन्य कमांड के साथ भी उपयोग किया जा सकता है। यदि आपके पास कई जटिल कमांड हैं जिन्हें आपको निष्पादित करने की आवश्यकता है, तो xargs एक बहुत उपयोगी टूल है।
यदि आपको Linux में xargs कमांड का उपयोग कैसे करें पर हमारे लेख का आनंद आया, तो हमारे कुछ अन्य Linux कंटेंट को देखना सुनिश्चित करें, जैसे "डिवाइस पर कोई स्थान नहीं बचा" त्रुटि को ठीक करने या Ubuntu को तेज करने पर हमारे गाइड।