2010-08-21 21 views
10

मेरे पास फ़ोल्डर और सबफ़ोल्डर का समूह है। प्रत्येक में, अन्य चीजों के साथ, उपयोगी डेटा के साथ index.yml नामक एक टेक्स्ट फ़ाइल होती है। मैं एक खोज स्ट्रिंग के उदाहरण खोजने के लिए विभिन्न index.yml फ़ाइलों के माध्यम से खोजना चाहता हूं। मुझे संदर्भ की कुछ पंक्तियां और index.yml फ़ाइल की निर्देशिका देखने में सक्षम होना चाहिए।किसी दिए गए नाम की फ़ाइलों के लिए रिकर्सिवली खोज करें, और किसी विशेष वाक्यांश के उदाहरण ढूंढें और उस फ़ाइल के पथ को प्रदर्शित करें

यह लगभग काम करता है, लेकिन यह मुझे फ़ाइल नाम नहीं देता:

cat `find . -name 'index.yml'`| grep -i -C4 mySearchString 

कैसे मैं यह कर और फ़ाइल नाम मिल सकता है?

मैं msys का उपयोग कर विंडोज पर फंस गया हूं। नोट मुझे लगता है कि पूर्ण जीएनयू grep नहीं है, इसलिए मैं अन्य SO प्रश्नों में सुझाए गए अनुसार grep --exclude या grep -R नहीं चला सकता।

उत्तर

10

कोशिश यह:

find -name "index.yml" -exec grep -i -H -C4 pattern {} \; 

ध्यान दें: वास्तव में msys के तहत परीक्षण नहीं किया।

+0

सिस्टम की तरह सामान्य यूनिक्स के लिए यह सही उत्तर है। मुझे ऐसा कुछ नहीं मिला, या साइगविन –

+0

ग्रेट पर काम करने के लिए एक xargs विविधता! धन्यवाद। जैसे ही एसओ मुझे देता है .. मैं इस जवाब को स्वीकार करूंगा। कुछ समय सीमा लगता है। – AndyL

+0

तो {} \; क्या करता है कर? – AndyL

0

एक संभावना यह (मैं नहीं जानता कि क्या वास्तव में msys स्वीकार करता है):

find . -name index.yml -exec grep -i -C4 mySearchString /dev/null {} + 

/dev/null सुनिश्चित करने के लिए कम से कम दो pathnames देखते हैं ताकि पथ प्रत्येक मैच के साथ छपा है कार्य करता है। G12 के लिए -H विकल्प का एक समान प्रभाव है।

-exec ... +find में निर्माण कमांड के एक उदाहरण में एकाधिक पथनामों को पारित करने का कारण बनता है। यदि इसे लागू नहीं किया गया है, तो आपको -exec ... \; का उपयोग करना होगा।