Ich habe eine solche Verzeichnisstruktur
data
|___
|
abc
|____incoming
def
|____incoming
|____processed
123
|___incoming
456
|___incoming
|___processed
In allen Ordnern im Datenverzeichnis befindet sich ein eingehender Unterordner. Ich möchte alle Dateien aus allen Ordnern und Unterordnern mit Ausnahme der Verzeichnisse def / incoming und 456 / incoming abrufen. Ich habe es mit folgendem Befehl ausprobiert
find /home/feeds/data -type d \( -name 'def/incoming' -o -name '456/incoming' -o -name arkona \) -prune -o -name '*.*' -print
aber es funktioniert nicht wie erwartet.
Ravi
grep -v something
um auszuschließen, was immer Sie nicht wollenAntworten:
Das funktioniert:
Erläuterung:
find /home/feeds/data
: Starten Sie die Suche rekursiv über den angegebenen Pfad-type f
: Nur Dateien finden-not -path "*def/incoming*"
: nichts mit einschließendef/incoming
als Teil seines Pfades auf-not -path "*456/incoming*"
: Nimm nichts mit456/incoming
als Teil seines Pfades aufquelle
-path
Entspricht der gesamten Saite. Wenn Sie dies tunfind .
, müssen Ihre-path
Saiten./path/to/directory/*
-not -path
Information wird in diesem Beispiel definitiv funktionieren, aber esfind
wird immer noch in die Verzeichnisstruktur iteriert und es werden CPU-Zyklen verwendet, um alle diese Verzeichnisse / Dateien zu durchlaufen. Um zu verhindern, dassfind
diese Verzeichnisse / Dateien durchlaufen werden (möglicherweise befinden sich dort Millionen von Dateien), müssen Sie sie verwenden-prune
(die-prune
Option ist jedoch schwierig zu verwenden).Nur zur Dokumentation: Möglicherweise müssen Sie tiefer graben, da es viele Search'n'skip-Konstellationen gibt (wie ich es musste). Es könnte sich herausstellen, dass
prune
Ihr Freund-not -path
nicht das tut, was Sie erwarten.Dies ist also ein wertvolles Beispiel für 15 Suchbeispiele, die Verzeichnisse ausschließen:
http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html
Um auf die ursprüngliche Frage zu verlinken, hat das Ausschließen für mich wie folgt funktioniert:
Wenn Sie dann eine Datei suchen und dennoch Pfade ausschließen möchten, fügen Sie einfach hinzu
| grep myFile.txt
.Dies kann auch von Ihrer Suchversion abhängen. Aha:
quelle
-name
Entspricht nur dem Dateinamen, nicht dem gesamten Pfad. Sie möchten-path
stattdessen für die Teile verwenden, in denen Sie die Verzeichnisse wie beschneidendef/incoming
.quelle
quelle
find ... -print0
in Verbindung mit einem späterenxargs -0
Befolgen Sie diese Anweisungen, um ein Verzeichnis in find auszuschließen. Befehl :
quelle