Probleme beim Ausschließen von Verzeichnissen in einer Linux-Suche


1

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.

Antworten:


3

Das sollte funktionieren:

find -path '*/test/*' -prune -o -name '*.java' -exec grep blah {} \;

2
-path '*/test/*' -prune ist einfacher ausgedrückt als -name test -prune. Wenn Sie das ersetzen \; durch eine +, das grep Der Befehl wird seltener ausgeführt und zeigt (fast immer) Dateinamen bei Übereinstimmungen an. Wenn Sie hinzufügen -H nach dem grepenthalten die Übereinstimmungen immer Dateinamen.
Gilles

@ Gilles: Danke für den exzellenten Input; Jemand in meiner Nähe schlug -name test -prune vor, was in diesem Fall funktioniert. Ich kann mir jedoch vorstellen, dass bei einer anderen Suche mit -name test -prune die Dateien mit dem Namen test ausgeschlossen würden, falls welche vorhanden wären.
GreenMatt

1
@ GreenMatt: Ja. Hier tritt das Problem seitdem nicht mehr auf 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 Sie find -name test -type d -prune -o ….
Gilles

0

Durch die Konsolidierung der oben genannten Tipps wird rekursiv nach PHP-Dateien gesucht, es werden jedoch mehrere Verzeichnisse ausgeschlossen und anschließend komprimiert.

find -name locallibs -prune -o -name libs -prune -o -name wiki -prune -o -name tmp -prune -o -name '* .php' -exec zip all.zip {} \;

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.