मैं का अर्थ जानना चाहता हूँ {} +में execआदेश, और के बीच अंतर क्या है {} +और {} \;। सटीक होने के लिए, इन दोनों में क्या अंतर है:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
मैं का अर्थ जानना चाहता हूँ {} +में execआदेश, और के बीच अंतर क्या है {} +और {} \;। सटीक होने के लिए, इन दोनों में क्या अंतर है:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
जवाबों:
का उपयोग करते हुए ;(अर्धविराम) या +(धन का चिह्न) आदेश से लागू खोल आदेशों समाप्त करने के लिए अनिवार्य है -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
कमांड लाइन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर बनाई गई है।
{}कमांड के भीतर केवल एक उदाहरण की अनुमति है।
यह सभी देखें:
यह देखते हुए कि कमांड तीन फाइलों के नीचे मिलती है:
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
प्रति man find:
-exec कमांड {} + -exec कार्रवाई का यह संस्करण चयनित फाइलों पर निर्दिष्ट कमांड चलाता है, लेकिन कमांड लाइन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर बनाया गया है; कमांड की कुल संख्या का मिलान की गई फ़ाइलों की संख्या से बहुत कम होगा। कमांड लाइन उसी तरह से बनाई गई है जिस तरह से xargs अपनी कमांड लाइन बनाता है। कमांड के भीतर '{}' के केवल एक उदाहरण की अनुमति है। कमांड को शुरुआती डायरेक्टरी में निष्पादित किया जाता है।
man find(1)बहुत विस्तार से वर्णित है , आसानी से किसी के द्वारा भी ढूंढा जा सकता है। आलसी मत बनो।