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