Ich möchte alle Dateien mit Ausnahme einiger Dateitypen prüfen.

36

Wie kann ich grepDateien in einem bestimmten Ordner mit Ausnahme einiger Dateitypen rekursiv bearbeiten?

Zum Beispiel suche ich in meinem Arbeitsbereichsordner nach einer Zeichenfolge, die dann in SQL-Dateien durchsucht und serialisierte Zeichenfolgen generiert wird.

In diesem Fall möchte ich grepden Arbeitsbereich-Ordner mit Ausnahme von SQL-Dateien.

Ich suche vorzugsweise einen Einzeiler, wenn möglich.

chrisjlee
quelle
5
Beachten Sie, dass Linux und Unix und Unix-a-likes nicht wirklich "Dateitypen" haben, wie Sie es zu wollen scheinen. Es ist nur eine Konvention, dass Dateinamen das Suffix ".c" oder ".txt" oder ".sql" haben - diese Suffixe sind nicht einmal Windows-artige "Erweiterungen", geschweige denn Indikatoren, die SQL oder Text oder C-Quellcode leben in den Dateien.
Bruce Ediger

Antworten:

46

Wenn Sie GNU haben grep, können Sie die --exclude=GLOBOption wie verwenden

grep -r --exclude='*.sql' pattern dir/
jw013
quelle
1
Wie kann ich eine einzelne Datei ausschließen?
Nayeem
8

Dies erledigt das für Sie und schließt .sql- und .txt-Dateien aus:

find /some/dir -type f ! -name '*\.sql' ! -name '*.txt' -print0 | xargs -0 grep 'foobar'

Es hört sich jedoch so an, als wäre ack ein weitaus besseres Werkzeug für das, was Sie versuchen:

ack -a --nosql 'foobar' /some/dir
Mark McKinstry
quelle
Entschuldigung, ich habe den 'ack'-Teil nicht gesehen und in meine Antwort eingefügt, die nun gelöscht ist.
Chance
Ein anderer Benutzer stellt fest, dass ack - a --nobinaryBinärdateien enthalten sind
Michael Mrozek
Der Backslash im Dateinamenmuster wird nicht benötigt.
Kusalananda