Wie kann ich mit find
alle Dateien und Verzeichnisse finden, die einem Muster entsprechen, mit Ausnahme eines Verzeichnisses? ?
Angenommen, ich habe die folgende Dateistruktur;
wie würde ich die folgende Ausgabe mit find
erhalten :
./bar/foo.txt./bar/foobar./bar/foobar/foofoo.txt./foo-exclude-me-not./foo-exclude-me-not/foo.txt
Ich habe versucht, beide der folgenden Befehle zu verwenden:
finden . -name 'foo-exclude-me' -prune -o -name 'foo*'find . -name 'foo*' ! -path './foo-exclude-me/*'
aber beide geben dies zurück:
./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt
Wie kann ich foo-exclude-me
richtig ausschließen Verzeichnis?
Akzeptierte Antwort:
find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print
Ohne -print
, gilt die implizite Standardaktion für alle Übereinstimmungen, auch für beschnittene. Der explizite -print
gilt nur unter den angegebenen Bedingungen, die -name 'foo*'
sind nur im else-Zweig von -name 'foo-exclude-me'
.
Verwenden Sie im Allgemeinen einen expliziten -print
wenn Sie etwas Komplexeres als eine Konjunktion von Prädikaten tun.
Dein zweiter Versuch mit ! -path './foo-exclude-me/*'
hat nicht funktioniert, weil ./foo-exclude-me
stimmt nicht mit ./foo-exclude-me/*
überein (kein nachgestellter /
). Hinzufügen von ! -path ./foo-exclude-me
würde funktionieren.