कुछ अधिक अनुभवी उपयोगकर्ताओं के लिए, हम टर्मिनल पर अधिक कठिन नहीं बल्कि अधिक स्मार्ट तरीके से काम करने के नए तरीकों की तलाश में रहते हैं। xargs एक उपयोगी कमांड है जो दो कमांड के बीच एक सेतु का काम करती है, एक के आउटपुट को पढ़ती है और दूसरे को पढ़ी गई वस्तुओं के साथ निष्पादित करती है। कमांड का उपयोग आमतौर पर उन परिदृश्यों में किया जाता है जब कोई उपयोगकर्ता एक पैटर्न की खोज कर रहा होता है, फ़ाइलों को हटा रहा है और उनका नाम बदल रहा है, और बहुत कुछ। यहां हम आपको दिखाते हैं कि xargs . का उपयोग कैसे करें अपने लाभ के लिए आदेश।
xargs क्या है?
अपने मूल रूप में, xargs मानक इनपुट (या एसटीडीआईएन) से जानकारी पढ़ता है और पढ़ी गई वस्तुओं के साथ एक या अधिक बार कमांड निष्पादित करता है। कई सरल प्रदर्शन हैं, लेकिन यहां एक है जो दिखाता है कि मेरा क्या मतलब है।
xargs होने के लिए ls निष्पादित करें मेरे दस्तावेज़ फ़ोल्डर पर कमांड, मैं निम्नलिखित कमांड चलाऊंगा:
echo "Documents" | xargs ls
पाइप वर्ण | इससे पहले जो कुछ भी आता है उसे xargs . के लिए STDIN के रूप में पाइप कर रहा है .
आप देख सकते हैं कि xargs मेरे दस्तावेज़ फ़ोल्डर को बिना किसी समस्या के पढ़ता है। यह 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 , आपके लिए चीजों को आसान बनाता है।
उदाहरण के लिए, सभी ".txt" फ़ाइलों को खोजने के लिए जिनमें "मेकटेकेसियर" स्ट्रिंग है, निम्न कमांड चलाएँ:
find ./ -name "*.txt" | xargs grep "maketecheasier"
मेरे सिस्टम पर उत्पादित कमांड का आउटपुट यहां दिया गया है।
कार्रवाई काटें/कॉपी करें
Xargs , find . के साथ कमांड का उपयोग फाइलों के एक सेट को एक निर्देशिका से दूसरी निर्देशिका में कॉपी या स्थानांतरित करने के लिए भी किया जा सकता है। उदाहरण के लिए, 10 मिनट से अधिक पुरानी सभी टेक्स्ट फ़ाइलों को वर्तमान निर्देशिका से पिछली निर्देशिका में स्थानांतरित करने के लिए, निम्न आदेश का उपयोग करें:
find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../
-I xargs . द्वारा कमांड लाइन विकल्प का उपयोग किया जाता है एक प्रतिस्थापन-स्ट्रिंग को परिभाषित करने के लिए कमांड जिसे find . के आउटपुट से पढ़े गए नामों से बदल दिया जाता है आज्ञा। यहाँ रिप्लेस-स्ट्रिंग है {} , लेकिन यह कुछ भी हो सकता है। उदाहरण के लिए, आप "फ़ाइल" को एक प्रतिस्थापन-स्ट्रिंग के रूप में उपयोग कर सकते हैं।
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
निष्कर्ष
हालांकि मैंने यहां xargs . का उपयोग करने पर ध्यान केंद्रित किया है find . के साथ , इसका उपयोग कई अन्य कमांड के साथ भी किया जा सकता है। यदि आपके पास एकाधिक, जटिल आदेश हैं जिन्हें आपको निष्पादित करने की आवश्यकता है, xargs एक बहुत ही उपयोगी उपकरण है।
अगर आपको xargs . का उपयोग करने के बारे में हमारा लेख अच्छा लगा हो तो लिनक्स में कमांड, हमारी कुछ अन्य लिनक्स सामग्री की जांच करना सुनिश्चित करें, जैसे कि "डिवाइस पर कोई जगह नहीं बची" त्रुटि को ठीक करने या उबंटू को तेज करने पर हमारे गाइड।