मैं निम्नलिखित कमांड चलाने की कोशिश कर रहा हूं:
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' +
यह एक त्रुटि लौटा रहा है:
find: missing argument to -exec
मैं नहीं देख सकता कि इस आदेश में क्या गलत है, क्योंकि यह मैन पेज से मेल खाता है:
-exec कमांड {} +
-Exec विकल्प का यह संस्करण चयनित फ़ाइलों पर निर्दिष्ट कमांड चलाता है, लेकिन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर कमांड लाइन का निर्माण किया जाता है; कमांड की कुल संख्या- tions कमांड की मिलान की गई फ़ाइलों की संख्या से बहुत कम होगी। कमांड लाइन उसी तरह से बनाई गई है जिस तरह से xargs अपनी कमांड लाइन बनाता है। कमांड के भीतर '{}' के केवल एक उदाहरण की अनुमति है। कमांड को शुरुआती डायरेक्टरी में निष्पादित किया जाता है।
मैंने भी कोशिश की:
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' {} +
find a/folder b/folder -name *.c -o -name *.h -exec 'grep -I foobar' '{}' +
find a/folder b/folder -name "*.c" -o -name "*.h" -exec grep -I foobar '{}' +
find a/folder b/folder \( -name *.c -o -name *.h \) -exec grep -I foobar '{}' +
find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' \+
find
। हालाँकि यह -exec cmd {} +
वैरिएंट POSIX है और 80 के दशक से उपलब्ध है, GNU ने इसे हाल ही में (अपेक्षाकृत) जोड़ा (2005)। क्या find --version
बताता है?
-exec {} +
2005 में 4.2.12 में जोड़ा गया था। पुराने GNU में पाया जाता है, आप -print0 | xargs -r0
कुछ ऐसा ही पाने के लिए (गैर-POSIX) का उपयोग कर सकते हैं । 4.1
1994 से है।
-name
पैटर्न तर्क को उद्धृत किया जाना चाहिए -name "*.c" -o -name "*.h"
:। यह सच है, हालांकि यह -exec
त्रुटि से संबंधित नहीं है । आप देखेंगे कि अन्य सभी उत्तरों ने वाइल्डकार्ड को उद्धरणों में डाल दिया है, हालांकि केवल गिल्स ने इसका उल्लेख किया है। … (Cont'd)
-name "*.[ch]"
स्पष्टीकरण के बिना नाम की अभिव्यक्ति को ध्वस्त कर देता है। यह कमांड लाइन को सरल बनाने और विशेष रूप से, लाभ को समाप्त करने के लाभ हैं -o
। जिन भावों को सम्मिलित किया गया है, -o
वे सही पाने के लिए कठिन हैं। तुम्हारा होना गलत है; यदि आपकी कमांड ठीक है, तो यह त्रुटि नहीं करता है (जैसा कि गिल्स के उत्तर में है), यह grep
केवल .h
फाइलों पर चलेगा । आपको करने की आवश्यकता है '(' -name '*.c' -o -name '*.h' ')'
।
+
अंत में भागने की कोशिश की है ?find a/folder b/folder -name *.c -o -name *.h -exec grep -I foobar '{}' \+