इन घुंघराले ब्रेस को बैश करके अकेला छोड़ दिया जाता है; वे संबंध रखते हैं findऔर xargsक्रमश: और उनके आदमी पृष्ठों में वर्णित हैं।
man find
-exec आदेश ;
निष्पादित आदेश ; सच है अगर 0 स्थिति वापस आ गई है। खोजने के लिए निम्नलिखित सभी तर्कों को कमांड में तर्क दिया जाता है जब तक कि एक तर्क ;का सामना नहीं करना पड़ता है। स्ट्रिंग {}को वर्तमान फ़ाइल नाम से प्रतिस्थापित किया जा रहा है, इसे हर जगह संसाधित किया जा रहा है जो कमांड के तर्कों में होता है, न कि केवल उन तर्कों में जहां यह अकेला है, जैसा कि कुछ संस्करणों में है find। इन दोनों निर्माणों \को शेल द्वारा विस्तार से बचाने के लिए (ए ) के साथ भाग जाने या उद्धृत करने की आवश्यकता हो सकती है । -execविकल्प के उपयोग के उदाहरणों के लिए परीक्षा अनुभाग देखें । निर्दिष्ट
आदेशप्रत्येक मिलान की गई फ़ाइल के लिए एक बार चलाया जाता है। कमांड को प्रारंभिक निर्देशिका में निष्पादित किया जाता है। -exec
कार्रवाई के उपयोग के आसपास अपरिहार्य सुरक्षा समस्याएं हैं ; आपको -execdirइसके बजाय विकल्प का उपयोग करना चाहिए ।
-exec आदेश {} +
-execकार्रवाई का यह संस्करण चयनित फ़ाइलों पर निर्दिष्ट कमांड चलाता है , लेकिन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर कमांड लाइन का निर्माण किया जाता है; कमांड की कुल संख्या का मिलान की गई फ़ाइलों की संख्या से बहुत कम होगा। कमांड लाइन को उसी तरीके से बनाया गया है जो xargsअपनी कमांड लाइनों को बनाता है। {}कमांड के भीतर केवल एक उदाहरण की अनुमति है। कमांड को प्रारंभिक निर्देशिका में निष्पादित किया जाता है। यदि findकिसी त्रुटि का सामना करता है, तो यह कभी-कभी तत्काल बाहर निकलने का कारण बन सकता है, इसलिए कुछ लंबित आदेशों को बिल्कुल भी नहीं चलाया जा सकता है। यह वेरिएंट -execहमेशा सही रहता है।
-execdir आदेश ;
-execdir आदेश {} +
जैसे -exec, लेकिन निर्दिष्ट कमांड उपनिर्देशिका से मेल खाते फ़ाइल से चलाया जाता है, जो सामान्य रूप से वह निर्देशिका नहीं है जिसमें आपने ढूंढना शुरू किया था। यह कमांडिंग चालान के लिए एक अधिक सुरक्षित तरीका है, क्योंकि यह मिलान की गई फ़ाइलों के लिए पथों के समाधान के दौरान दौड़ की स्थिति से बचा जाता है। साथ के रूप में -exec कार्रवाई,
+ के रूप -execdir एक से मेल खाता फ़ाइल की तुलना में अधिक की प्रक्रिया के लिए एक कमांड लाइन का निर्माण होगा, लेकिन आदेश के किसी भी आह्वान है कि एक ही उप-निर्देशिका में मौजूद केवल सूची फ़ाइलें होगा। यदि आप इस विकल्प का उपयोग करते हैं, तो आपको यह सुनिश्चित करना होगा कि आपका $PATHपर्यावरण चर संदर्भ नहीं देता है.; अन्यथा, एक हमलावर किसी भी कमांड को चला सकता है जिसे वे एक निर्देशिका में उचित रूप से नामित फ़ाइल को छोड़ कर पसंद करते हैं जिसमें आप चलेंगे -execdir। यह उन प्रविष्टियों पर लागू होता है $PATHजिनमें रिक्त हैं या जो पूर्ण निर्देशिका नाम नहीं हैं। यदि findकिसी त्रुटि का सामना करता है, तो यह कभी-कभी तत्काल बाहर निकलने का कारण बन सकता है, इसलिए कुछ लंबित आदेशों को बिल्कुल भी नहीं चलाया जा सकता है। कार्रवाई का परिणाम इस बात पर निर्भर करता है कि +या ;संस्करण का उपयोग किया जा रहा है;
-execdir आदेश {} + हमेशा सच देता है, जबकि -execdir आदेश {} ; केवल तभी सच रिटर्न आदेश रिटर्न 0।
man xargs
-I की जगह-str
मानक इनपुट से पढ़े गए नामों के साथ प्रारंभिक-तर्कों में प्रतिस्थापित- आवृत्तियों की घटनाओं को बदलें । इसके अलावा, निर्विवाद रिक्तियां इनपुट आइटम को समाप्त नहीं करती हैं; इसके बजाय विभाजक newline वर्ण है। इंप्लाइज -xऔर -L 1।
-i[ प्रतिस्थापित-str ], --replace[ =प्रतिस्थापित-str ]
यह विकल्प -Iप्रतिस्थापित-str के लिए एक पर्याय है यदि प्रतिस्थापित-str निर्दिष्ट है। यदि प्रतिस्पर्धात्मक तर्क गायब है, तो प्रभाव जैसा है -I{}। यह विकल्प हटा दिया गया है; -Iइसके बजाय उपयोग करें ।
संपादित करें: और यहाँ क्यों बैश उन घुंघराले ब्रेसिज़ की उपेक्षा करता है:
man bash
{ सूची; }
सूची को केवल वर्तमान शेल वातावरण में निष्पादित किया जाता है। सूची को एक नई पंक्ति या अर्धविराम के साथ समाप्त किया जाना चाहिए। इसे एक ग्रुप कमांड के रूप में जाना जाता है। वापसी की स्थिति सूची की निकास स्थिति है। ध्यान दें कि मेटाचैकर ( और ) के विपरीत , { और } आरक्षित शब्द हैं और वहां होना चाहिए जहां एक आरक्षित शब्द को मान्यता दी जाए। चूंकि वे एक शब्द विराम का कारण नहीं बनते हैं, उन्हें सूची से व्हॉट्सएप या किसी अन्य शेल मेटाचैकर द्वारा अलग किया जाना चाहिए।
जोर देने के लिए: सूची को एक नई पंक्ति या अर्धविराम के साथ समाप्त किया जाना चाहिए ।
{}- कमांड केtargetsसाथ कार्य करने का अर्थ हैfind, यहrmफाइल को हटा / पाया गया है।