जवाबों:
खैर, सामान्य मामला जो किसी कमांड के साथ काम करता है जो stdout को लिखता है, का उपयोग करना है xargs, जो आपको कमांड के अंत में किसी भी संख्या में कमांड-लाइन तर्क संलग्न करने देगा:
$ find … | xargs grep 'search'
या grepbackticks के साथ अपनी लाइन में कमांड एम्बेड करने के लिए या $(), जो कमांड को चलाएगा और इसके आउटपुट को बदलेगा:
$ grep 'search' $(find …)
ध्यान दें कि यदि फ़ाइल नाम में व्हाट्सएप, या कुछ अन्य "अजीब अक्षर" ( \'"xargs के \[*?लिए $(find …)) हैं , तो ये कमांड काम नहीं करते हैं ।
हालांकि, findदिए गए तर्कों पर एक कार्यक्रम को निष्पादित करने की क्षमता के विशिष्ट मामले में अंतर्निहित है:
$ find … -exec grep 'search' {} \;
के बीच सब कुछ -execऔर ;निष्पादित करने के लिए आदेश है; {}द्वारा फाइल नाम के साथ प्रतिस्थापित किया जाता है find। जो grepप्रत्येक फ़ाइल के लिए एक अलग निष्पादित करेगा ; चूँकि grepकई फ़ाइल नाम ले सकते हैं और उन सभी को खोज सकते हैं, आप यह बताने के ;लिए बदल सकते हैं कि +सभी मिलान फ़ाइलनामों को पास करने के लिए क्या करें grep:
$ find … -exec grep 'search' {} \+
find ... -type f -print0 | xargs -r0 grep 'search' /dev/null। QED। जबकि -exec +बहुत कुशल है, यह खोज के सभी संस्करण पर मौजूद नहीं है।
$ find … -exec grep 'search' {} \+रूप है बहुत सबसे तेजी से।
grep(जैसे गैर-एम्बेडेड लिनक्स या बीएसडी या मैक ओएस एक्स पर) के कुछ संस्करणों में -rएक पुनरावर्ती खोज करने का विकल्प होता है। OpenBSD पर, उपयोग करें -R(और --excludeनीचे उदाहरण में ऐसा नहीं है )। इसके findसाथ सरल संयोजनों को शामिल किया गया है grep।
अपने कार्यान्वयन नहीं है, तो -Rझंडा, या यदि आप अधिक सजावटी फ़ाइल मिलान मापदंड चाहते हैं, आप उपयोग कर सकते हैं -execके प्राथमिक findनिष्पादित करने के लिए grep। कुछ पुराने findकार्यान्वयन समर्थन नहीं करते हैं -exec... +; इन प्रणालियों पर, के ;बजाय का उपयोग करें +(यह grepएक बार प्रति फ़ाइल कॉल करेगा , इसलिए यह धीमा होगा, लेकिन अन्यथा परिणाम समान होगा)। फ़ाइल के नाम को दिखाने के लिए /dev/nullट्रिक पर ध्यान दें, grepभले ही वह एकल फ़ाइल पर बुलाया जाए (GNU grep और FreeBSD / NetBSD / OSX grep में एक -Hही प्रभाव प्राप्त करने का विकल्प है)।
find . -type f -name '*.o' -prune -o -exec grep 'needle' /dev/null {} +
grep -r --exclude='*.o' 'needle' .
GNU grep-Hहमेशा फ़ाइल नाम प्रिंट करने का विकल्प होता है।