2009-03-22 10 views
10

खोज कमांड अन्य यूनिक्स कमांड से अलग दिखता है।कमांड के सिंटैक्स को समझने में असमर्थ

निम्नलिखित कमांड के अंत में खाली घुंघराले ब्रैकेट और पिछड़े फ़्लैश क्यों हैं?

find * -perm 777 -exec chmod 770 {} \; 

मैं कर्ली कोष्ठक के लिए लेकिन पिछड़े फ्लैश के लिए नहीं एक कारण मिल गया।

कर्ली कोष्ठक -exec रूप

एक ही है, सिवाय इसके पथ के लिए जाहिरा तौर पर कर रहे हैं कि `` {} '' उपयोगिता

से प्रत्येक मंगलाचरण के लिए यथासंभव अधिक से अधिक pathnames के साथ बदल दिया है
+2

ब्रेसिज़ भी आप आदेशों को अंतिम तर्क होने की उम्मीद नहीं है (या आवश्यकता होती है) फ़ाइल नाम चलाते हैं। आप जहां भी चाहें फ़ाइल नाम डालने के लिए ब्रेसिज़ का उपयोग कर सकते हैं, यहां तक ​​कि प्रोग्राम का नाम निष्पादित करने के लिए भी! –

+0

संभव डुप्लिकेट [सरल यूनिक्स कमांड, {} और \; क्या है; के लिए] (http://stackoverflow.com/questions/447048/simple-unix-command-what-is-the-and-for) – kenorb

उत्तर

2

मैं सलाह देते हैं कि आप के बजाय कर के रूप में

find . -perm 777 -print0 | xargs -0 chmod 770 

"xargs" खोज के परिणाम लेने के लिए और निम्न आदेश को एक समय में यह 20 को खिलाने के लिए कहा गया है कि।

+1

एक समय में बीस? कौन कहता है? –

+0

मैन xargs (संस्करण 4.4.0 का) संख्या 20 का उल्लेख नहीं करता है। हालांकि, इस व्यवहार को लागू किया जा सकता है, xrs को -20 के साथ कॉल करके। – Stephan202

+0

"एक समय में 20" औसत की तरह था। यह वास्तव में बहुत से है क्योंकि ऐसा लगता है कि एक सामान्य कमांड लाइन में फिट हो सकता है, जो मुझे लगता है कि पॉज़िक्स में 512 बाइट लंबा है। –

16

-exec आदेश का पालन किसी भी तर्क के बाद किया जा सकता है जो प्रत्येक फ़ाइल के लिए निष्पादित किया जाने वाला आदेश बनाते हैं। अंतिम तर्क की पहचान करने के लिए कुछ तरीका होना चाहिए। यह क्या है \; कर देता है। ध्यान दें कि अन्य बातों के -exec स्विच करने के बाद का पालन हो सकता है: (। यह यूलर निर्देशिका में सभी सी फ़ाइलें और अजगर फ़ाइलें पाता है)

find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \; 

कारण यह है कि कार्यकारी करने के लिए पूर्ण आदेश की आवश्यकता नहीं है कोट्स के अंदर रहें, यह है कि ज्यादातर परिस्थितियों में, कमांड के अंदर बहुत सारे उद्धरणों से बचने की आवश्यकता होगी।

3

(बच निकला) अर्धविराम की आवश्यकता है ताकि "ढूंढें" बता सके कि निष्पादित कार्यक्रम के तर्क (यदि कोई हैं) और तर्क "ढूंढने" के लिए अतिरिक्त तर्क कहां से हैं।

6

स्ट्रिंग में वर्तमान फ़ाइल के पथनाम द्वारा प्रतिस्थापित किया गया है।

अर्धविराम का प्रयोग find उपयोगिता द्वारा किए गए शेल कमांड को समाप्त करने के लिए किया जाता है।

इसे बचने या उद्धृत करने की आवश्यकता है, इसलिए इसे खोल द्वारा व्याख्या नहीं किया जाएगा, क्योंकि ; शैल (सूची ऑपरेटर) द्वारा उपयोग किए जाने वाले विशेष वर्णों में से एक है।

यह भी देखें: Why are the backslash and semicolon required with the find command's -exec option?

संबंधित मुद्दे