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.