मैन्युअल पृष्ठ (या ऑनलाइन जीएनयू मैनुअल ) काफी सब कुछ बताते हैं।
find -exec कमांड {} \;
प्रत्येक परिणाम के लिए, command {}
निष्पादित किया जाता है। सभी घटनाओं {}
को फ़ाइल नाम से बदल दिया जाता है। ;
शेल की व्याख्या करने से रोकने के लिए एक स्लैश के साथ उपसर्ग किया जाता है।
find -exec कमांड {} +
प्रत्येक परिणाम को command
बाद में जोड़ा जाता है और निष्पादित किया जाता है। कमांड लंबाई की सीमा को ध्यान में रखते हुए, मुझे लगता है कि इस कमांड को अधिक बार निष्पादित किया जा सकता है, मैनुअल पेज मेरा समर्थन कर रहा है:
कमांड की कुल संख्या का मिलान की गई फ़ाइलों की संख्या से बहुत कम होगा।
मैनुअल पृष्ठ से इस उद्धरण पर ध्यान दें:
कमांड लाइन को उसी तरह बनाया गया है जिस तरह से xargs अपनी कमांड लाइन बनाता है
इसीलिए व्हॉट्सएप के अलावा {}
और +
किसी भी पात्र को अनुमति नहीं है । +
यह पता लगाता है कि तर्कों को उसी तरह कमांड में जोड़ा जाना चाहिए xargs
।
समाधान
सौभाग्य से, GNU कार्यान्वयन mv
लक्ष्य निर्देशिका को एक तर्क के रूप में स्वीकार कर सकता है, -t
या तो पैरामीटर के साथ --target
। इसका उपयोग होगा:
mv -t target file1 file2 ...
आपकी find
आज्ञा बन जाती है:
find . -type f -iname '*.cpp' -exec mv -t ./test/ {} \+
मैनुअल पेज से:
-exec कमांड;
निष्पादित आदेश; सच है अगर 0 स्थिति वापस आ गई है। निम्नलिखित सभी तर्क खोजने के लिए कमांड के तर्क दिए जाते हैं जब तक कि एक तर्क जिसमें `; 'शामिल नहीं है; सामना किया है। स्ट्रिंग `{} 'को वर्तमान फ़ाइल नाम से बदल दिया जाता है जिसे हर जगह संसाधित किया जाता है यह कमांड के तर्कों में होता है, न कि केवल उन तर्कों में जहां यह अकेला है, जैसा कि कुछ संस्करणों में पाया जाता है। इन दोनों निर्माणों को शेल द्वारा विस्तार से बचाने के लिए (`\ 'के साथ) भाग जाने या उद्धृत करने की आवश्यकता हो सकती है। -Exec विकल्प के उपयोग के उदाहरणों के लिए EXAMPLES अनुभाग देखें। निर्दिष्ट आदेश प्रत्येक मिलान की गई फ़ाइल के लिए एक बार चलाया जाता है। कमांड को शुरुआती डायरेक्टरी में निष्पादित किया जाता है। -Exec कार्रवाई के उपयोग के आसपास सुरक्षा संबंधी समस्याएं नहीं हैं; आपको इसके बजाय -execdir विकल्प का उपयोग करना चाहिए।
-exec कमांड {} +
-Exec कार्रवाई का यह संस्करण चयनित फ़ाइलों पर निर्दिष्ट कमांड चलाता है, लेकिन कमांड लाइन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर बनाया गया है; कमांड की कुल संख्या का मिलान की गई फ़ाइलों की संख्या से बहुत कम होगा। कमांड लाइन को उसी तरह बनाया गया है जिस तरह से xargs अपनी कमांड लाइन बनाता है। कमांड के भीतर `{} 'के केवल एक उदाहरण की अनुमति है। कमांड को शुरुआती डायरेक्टरी में निष्पादित किया जाता है।