2010-08-21 6 views
10

Ich habe eine Reihe von Ordnern und Unterordnern. Jede enthält unter anderem eine Textdatei mit der Bezeichnung mit nützlichen Daten. Ich möchte alle verschiedenen Dateien durchsuchen, um Instanzen eines Suchstrings zu finden. Ich muss in der Lage sein, ein paar Zeilen Kontext und das Verzeichnis der Datei zu sehen, die gefunden wurde.Rekursiv nach Dateien mit einem bestimmten Namen suchen und Instanzen einer bestimmten Phrase suchen UND den Pfad zu dieser Datei anzeigen

Diese fast funktioniert, aber es gibt mir nicht die Dateinamen:

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

Wie kann ich dies tun und die Dateinamen bekommen?

Ich stecke auf Windows mit msys. Hinweis: Ich habe anscheinend keine vollständige GNU grep, daher kann ich grep --exclude oder grep -R nicht ausführen, wie in anderen SO-Fragen vorgeschlagen.

Antwort

10

versuchen, diese:

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

Anmerkung: nicht wirklich unter msys getestet.

+0

Dies ist die richtige Antwort für ein normales Unix-ähnliches System. Ich konnte so etwas nicht bekommen, oder eine Xargs-Sorte, um an Cygwin zu arbeiten. –

+0

Großartig! Vielen Dank. Sobald SO mich ... lässt, werde ich diese Antwort akzeptieren. Scheint ein Zeitlimit zu sein. – AndyL

+0

Also was macht {} \; machen? – AndyL

0

Eine Möglichkeit (ich weiß nicht, was msys akzeptiert genau):

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

Die /dev/null, um sicherzustellen, dient mindestens zwei Pfadnamen, so dass der Pfad mit jedem Spiel gedruckt wird. Die Option -H grep hat einen ähnlichen Effekt.

Das -exec ... + Konstrukt in find bewirkt, dass mehrere Pfadnamen an eine einzelne Instanz des Befehls übergeben werden. Wenn es nicht implementiert ist, müssen Sie -exec ... \; verwenden.