प्रस्तावना: मैं -exec {} \;
और के बीच का अंतर समझता हूं -exec {} +
। मुझे भी इस तरह की समस्या नहीं है , मैं सिर्फ शब्दार्थ के बारे में उत्सुक हूं find
।
इसके बजाय -exec
तर्क को समाप्त करते समय , हमें उदाहरण के लिए, इसे समाप्त करने की आवश्यकता है :+
;
{} +
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
;
इन उदाहरणों का उपयोग +
ठीक काम करने के बजाय (लेकिन स्पष्ट रूप से कुछ और करता है)।
से POSIX :
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +
... केवल एक <प्लस-साइन> जो तुरंत केवल दो वर्णों वाले एक तर्क का अनुसरण करता है "
{}
" प्राथमिक अभिव्यक्ति के अंत को रोक देगा। <Plus-sign> के अन्य उपयोगों को विशेष नहीं माना जाएगा।
दूसरे शब्दों में, का उपयोग करते समय +
, कमांड को समाप्त करने की आवश्यकता होती है {} +
।
ऐसा क्यों है? और केवल और केवल क्यों +
नहीं ;
? पहले तो मैंने सोचा कि शायद फिल्नाम के साथ टकराव से बचा जाए जिसमें ए +
, लेकिन ;
ठीक काम करने के लिए फिल्नाम हैं? मुझे यह विश्वास करना कठिन है कि यह सीमा मनमाना है ...
The "-exec ... {} +" syntax adopted was a result of
IEEE PASC Interpretation 1003.2 #210
और उस दस्तावेज़ में आपको अधिक विवरण मिलेंगे, जैसे:Note that the "+" is only treated as special if it immediately follows "{}". This minimises the chances of causing problems with existing uses of "+" as an argument with "-exec".