खोज के -exec कमांड में {} + का क्या अर्थ है?


23

मैं का अर्थ जानना चाहता हूँ {} +में execआदेश, और के बीच अंतर क्या है {} +और {} \;। सटीक होने के लिए, इन दोनों में क्या अंतर है:

find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;

5
यह man find(1)बहुत विस्तार से वर्णित है , आसानी से किसी के द्वारा भी ढूंढा जा सकता है। आलसी मत बनो।
मिरोस्लाव कोसकर

धन्यवाद प्रिय मिरोस्लाव, मैंने खोजा man exec!

आह, मैं पहले कभी {} +उपयोग में नहीं आया था । मैं आम तौर पर उस (और अक्सर find ... -print0 | xargs -0 ...) के लिए xargs का उपयोग करता हूं

जवाबों:


27

का उपयोग करते हुए ;(अर्धविराम) या +(धन का चिह्न) आदेश से लागू खोल आदेशों समाप्त करने के लिए अनिवार्य है -exec/ execdir

;(अर्धविराम) या +(प्लस चिह्न) के बीच का अंतर यह है कि कैसे तर्क को खोजने -exec/ -execdirपैरामीटर में पारित किया जाता है । उदाहरण के लिए:

  • उपयोग ;करने से कई कमांड निष्पादित होंगे (अलग से प्रत्येक तर्क के लिए),

    उदाहरण:

    $ find /etc/rc* -exec echo Arg: {} ';'
    Arg: /etc/rc.common
    Arg: /etc/rc.common~previous
    Arg: /etc/rc.local
    Arg: /etc/rc.netboot
    

    निम्नलिखित सभी findतर्कों को कमांड के तर्क के लिए लिया जाता है।

    स्ट्रिंग {}को वर्तमान फ़ाइल नाम से संसाधित किया जा रहा है।

  • उपयोग +करने से कम से कम संभव कमांड निष्पादित होंगे (जैसा कि तर्क एक साथ संयुक्त हैं)। यह बहुत ही समान है कि xargsकमांड कैसे काम करता है, इसलिए यह प्रति पंक्ति में तर्कों की अधिकतम सीमा से अधिक से बचने के लिए प्रति कमांड के रूप में कई तर्कों का उपयोग करेगा।

    उदाहरण:

    $ find /etc/rc* -exec echo Arg: {} '+'
    Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
    

    कमांड लाइन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर बनाई गई है।

    {}कमांड के भीतर केवल एक उदाहरण की अनुमति है।

यह सभी देखें:


वहाँ है एक अंतर और एक प्रमुख एक। User1116056 का जवाब देखें
जाहिद

24

यह देखते हुए कि कमांड तीन फाइलों के नीचे मिलती है:

fileA
fileB
fileC

यदि आप -execएक प्लस ( +) चिह्न के साथ उपयोग करते हैं ,

find . -type f -exec chmod 775 {} +  

यह:

chmod 775 fileA fileB fileC

कमांड लाइन अंत में प्रत्येक मिलान किए गए फ़ाइल नाम को जोड़कर बनाया गया है, जो उसी तरह है जो xargsअपनी कमांड लाइनों का निर्माण करता है। कमांड की कुल संख्या ( chmodइस मामले में) मिलान की गई फ़ाइलों की संख्या से बहुत कम होगी।

यदि आप -execअर्धविराम ( ;) के साथ प्रयोग करते हैं ,

find . -type f -exec chmod 775 {} \;

यह:

chmod 775 fileA
chmod 775 fileB
chmod 775 fileC

5

प्रति man find:

-exec कमांड {} + -exec कार्रवाई का यह संस्करण चयनित फाइलों पर निर्दिष्ट कमांड चलाता है, लेकिन कमांड लाइन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर बनाया गया है; कमांड की कुल संख्या का मिलान की गई फ़ाइलों की संख्या से बहुत कम होगा। कमांड लाइन उसी तरह से बनाई गई है जिस तरह से xargs अपनी कमांड लाइन बनाता है। कमांड के भीतर '{}' के केवल एक उदाहरण की अनुमति है। कमांड को शुरुआती डायरेक्टरी में निष्पादित किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.