Der Versuch, eine Reihe von Verzeichnissen von einem Fund auszuschließen, macht mich verrückt! Ich möchte nach allen .java-Dateien in einem Verzeichnisbaum suchen, aber alle in Testverzeichnissen ignorieren. Also habe ich versucht:
find . -name "*.java" -not -path "test"
und
find . -name "*.java" -path "test" -prune
und verschiedene Variationen davon. Allerdings bekomme ich - je nach Variante - entweder alle Java-Dateien (auch die in Testverzeichnissen) oder keine. Ich habe mir andere Fragen hier auf SU angesehen (z. dieses und dieses ), aber entweder gehen sie nicht auf meine Situation ein oder ich vermisse etwas.
Ich verwende gnu find 4.2.27 (fwiw, auf Centos 5.5 mit gnu bash 3.2.25).
Edit: Sorry, ich hätte ursprünglich festlegen sollen, dass ich eine machen muss
-exec grep blah {} \;
In dieser Situation funktioniert die Weiterleitung durch grep -v nicht.
-path '*/test/*' -prune
ist einfacher ausgedrückt als-name test -prune
. Wenn Sie das ersetzen\;
durch eine+
, dasgrep
Der Befehl wird seltener ausgeführt und zeigt (fast immer) Dateinamen bei Übereinstimmungen an. Wenn Sie hinzufügen-H
nach demgrep
enthalten die Übereinstimmungen immer Dateinamen.test
und*.java
schneide dich nicht Ansonsten sind beide Fälle sinnvoll. Wenn Sie nur Verzeichnisse mit dem Namen test ausschließen möchten, verwenden Siefind -name test -type d -prune -o …
.Durch die Konsolidierung der oben genannten Tipps wird rekursiv nach PHP-Dateien gesucht, es werden jedoch mehrere Verzeichnisse ausgeschlossen und anschließend komprimiert.
quelle