Versuch, ein bestimmtes Verzeichnis von einem grep-Befehl auszuschließen

1227
phdumaresq

Ich habe ein Verzeichnis mit Hunderten von Unterverzeichnissen, deren Namen alle mit Datumsangaben versehen sind. In jedem dieser Unterverzeichnisse gibt es eine Reihe von Dateien, die ich durchsuchen muss. Der grep-Befehl, den ich gerade verwende, lautet wie folgt:

grep -ER --exclude-dir=2017060200_it2 "PATTERN" *_it2/file00*.pjson

und die Ordnerstruktur sieht folgendermaßen aus:

parcel/ |--- 2015010100_it2/ |--- file001.pjson |--- file002.pjson ... |--- file005.pjson |--- 2015010200_it2/ |--- file001.pjson ... ... |--- 2017060200_it2/ |--- file001.pjson |--- file002.pjson ... 

Ich möchte, dass mein Befehl grep file00*.pjsonfür jedes einzelne Unterverzeichnis sucht, AUSSER das letzte, in diesem Fall 2017060200_it2. Meine --exclude-dir=2017060200scheint dies jedoch nicht zu erreichen.

Ich verwende grep V2.20 auf einem CentOS 6.7-System. Wenn ich es benutze grep --help, bekomme ich die Option zur Verwendung --exclude-dir. Ich glaube nicht, dass diese Informationen relevant sind.

Bonus: Wenn Sie mir zeigen könnten, wie Sie das aktuelle Datum abrufen und so formatieren können yyyyMMdd00_it2, dass ich daraus einen Cron-Job machen kann, wäre das großartig, aber ich hatte vor, herauszufinden, wie das separat zu erledigen ist, sobald ich diese Arbeit bekommen habe.

0

1 Antwort auf die Frage

0
Joe P

Ihr --exclude-dir ist korrekt, es wirkt sich nur auf die Rekursion aus - Sie haben jedoch explizit alle *_it2Verzeichnisse in der Datei glob angegeben, und das steht vor jeder Rekursion.

Ich schlage vor, findstattdessen zu verwenden - etwa (ungeprüft)

find . -name 2017060200_it2 -prune -name 'file00*.pjson' -execdir grep -E "PATTERN" {} \; 

Bonus: date '+%Y%m%d00_it2'

Super, hat wirklich gut funktioniert! Musste den Befehl ein wenig ändern, aber das hat die Arbeit gemacht! Ich danke dir sehr. Bonus: Der Datumsteil hat auch gut funktioniert, danke! phdumaresq vor 6 Jahren 0
In einem anderen Hinweis habe ich das mit "grep --exclude" anstelle von "grep --exlude-dir" zum Laufen gebracht. Ich dachte, "--exclude" sei für Dateien gedacht, aber ich denke, es geht nur um das Rekursive Verhalten... phdumaresq vor 6 Jahren 0