2010-08-21 24 views
10

Bir sürü klasör ve alt klasörüm var. Her biri, diğer şeylerin yanı sıra yararlı verilerle index.yml adlı bir metin dosyası içerir. Bir arama dizesinin örneklerini bulmak için tüm farklı index.yml dosyalarını aramak istiyorum. Birkaç satırlık bağlamı ve bulunan index.yml dosyasının dizinini görebilmem gerekir.Belirli bir adın dosyalarını düzenli olarak arayın ve belirli bir deyimin örneklerini bulun VE bu dosyanın yolunu görüntüleyin

Bu neredeyse, ama bana dosya vermez çalışır:

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

Bunu nasıl yapmak ve dosya adı alabilirim?

msys kullanarak Windows'ta takılıyorum. Not Ben tam GNU grep sahip görünmüyor, bu yüzden diğer SO sorularda önerildiği gibi grep --exclude veya grep -R çalıştıramam.

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

not:

cevap

10

bu deneyin aslında MSYS altında test edilmemiştir.

+0

Bu, normal bir unix benzeri sistem için doğru cevaptır. Ben böyle bir şey ya da cygwin –

+0

üzerinde çalışmak için bir xargs çeşit alamadım Harika! Teşekkürler. SO bana izin verir vermez ... bu cevabı kabul edeceğim. Zaman sınırı gibi görünüyor. – AndyL

+0

Peki, {} \; yap? – AndyL

0

Bir olasılık (I msys tam kabul bilmiyorum):

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

/dev/null yol adı her maçı ile basılır, böylece en az iki yol adlarını olmadığından emin olmak için hizmet vermektedir. Grep için -H seçeneği benzer bir etkiye sahiptir.

find'daki -exec ... + yapı, komutun tek bir örneğine birden çok yol adının geçirilmesine neden olur. Uygulanmazsa, -exec ... \;'u kullanmanız gerekir.