it-swarm.com.de

Wie führt man eine Grep-Operation für alle Dateien in einem Verzeichnis durch?

Ich arbeite mit xenserver und möchte einen Befehl für jede Datei ausführen, die sich in einem Verzeichnis befindet. Dabei werden einige Informationen aus der Ausgabe des Befehls entfernt und in einer Datei angehängt.

Ich weiß genau, welchen Befehl ich verwenden möchte und wie ich nach Bedarf Zeichenfolgen auslesen kann.

Was mir jedoch nicht klar ist, ist, wie ich diesen Befehl für jede Datei ausführen muss, um zur nächsten zu gelangen, bis keine Dateien mehr gefunden werden.

175
user2147075

grep $PATTERN * wäre ausreichend. Standardmäßig überspringt grep alle Unterverzeichnisse. Wenn Sie sie jedoch durchgehen möchten, grep -r $PATTERN * ist der Fall.

188
umi

Unter Linux verwende ich normalerweise diesen Befehl, um rekursiv nach einem bestimmten Text in einem Verzeichnis zu suchen

grep -rni "string" *

wo,

r = rekursiv, d. h. Unterverzeichnisse innerhalb des aktuellen Verzeichnisses durchsuchen
n = um die Zeilennummern auf stdout zu drucken
i = Suche ohne Berücksichtigung der Groß-/Kleinschreibung

124
Narain

Verwenden Sie find. Im Ernst, es ist der beste Weg, denn dann können Sie wirklich sehen, auf welche Dateien es sich bezieht:

find . -name "*.sql" -exec grep -H "slow" {} \;

Beachten Sie, dass -H Mac-spezifisch ist und den Dateinamen in den Ergebnissen anzeigt.

28
Rob

Wenn Sie mehrere Befehle ausführen möchten, können Sie Folgendes verwenden:

for I in `ls *.sql`
do
    grep "foo" $I >> foo.log
    grep "bar" $I >> bar.log
done
2
bryan