Diese Frage hat hier bereits Antworten :

Kommentare

  • Dort ' sa Dutzend Fragen zu den Problemen bei der Verwendung von -prune: Dies kann etwas verwirrend sein. Auch dies bei Stackoverflow beschreibt, warum ' so nervig ist.
  • Selbst wenn dies ein Betrug ist, ist die beste Antwort hier klarer als die beste Antwort auf die " korrekte " Frage.
  • Hmm, " find -prune isn ' funktioniert nicht für mich " klingt sicher anders als " Wie schließe ich Verzeichnisse von der Suchausgabe aus? " für mich …
  • @SamB Einverstanden Dies kann ' möglicherweise kein Duplikat sein.

Antwort

Dies ist, was die Option -prune ist für:

find . -type d -name "avoid_this_directory_please" -prune -o -type f -print 

Dies sagt im Grunde „wenn da“ ein Verzeichnis avoid_this_directory_please genannt, geben Sie es nicht ein, andernfalls, wenn es „eine reguläre Datei ist, drucken Sie seinen Pfadnamen“.

Kommentare

  • Ich wollte dasselbe etwas anders schreiben als find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \), aber ich mag Ihre Syntax besser. Danke.
  • @TimKennedy Sie würden wahrscheinlich die Eltern brauchen, wenn Sie find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print tun möchten.
  • guter Punkt. Ich ' weiß nicht einmal, wann / wo ich gelernt habe, es mit den Klammern zu tun. Dieses Alter ist im Nebel der Zeit verloren. 🙂
  • Dadurch werden natürlich alle Verzeichnisse mit dem Namen avoid_this_directory_please irgendwo im Baum entfernt, nicht nur die Verzeichnisse der obersten Ebene. -path würde diesbezüglich mehr Kontrolle ermöglichen, da die Manpage ( zitiert unten von Xen2050).
  • Ich wusste nicht, dass -prune alles nach dem ersten Argument, einschließlich -type, und war verwirrt darüber, dass Verzeichnisse nicht mit find / -type f -path /proc -prune -o -name foo -print entfernt wurden. Sowohl -type d als auch -type f im selben Befehl zu sehen, hat mich zum Klicken gebracht. Jetzt bin ich endlich zuversichtlich, find zu verwenden, danke.

Antwort

Um ein Verzeichnis zu vermeiden, versuchen Sie den -path-Test:

find . -type f ! -path "*/avoid_this_directory_please/*" 

Kommentare

  • Beachten Sie dies Es verhindert zwar, dass Dateien in avoid_this_directory_please ausgewählt werden (es sei denn, ihr Pfad enthält ungültige Zeichen), verhindert jedoch nicht, dass find dort absteigt . Das ' ist der Grund, warum -prune hier besser ist.
  • Dies ist sooooo viel besser als die Verwendung von prune. Ich muss immer eine halbe Stunde lang lesen, um herauszufinden, was ich nicht ' nicht suchen und dann mit der ODER-Logik koppeln möchte, um die gewünschten Dateien zu erhalten.
  • @Merlin Es hängt natürlich davon ab, was Sie erreichen wollen. Mit -prune wird find ' nicht einmal in die ausgewählten Pfade schauen, während mit ! -path, es würde immer noch den Pfad eingeben und alles untersuchen.

Antwort

Von man find im Abschnitt -path kombinieren Sie anscheinend die anderen 2 Antworten

To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs" and all files and directories under it, and print the names of the other files found, do something like this: find . -path ./src/emacs -prune -o -print 

Antwort

Versuchen Sie dies

find -name "*.js" -not -path "./directory/*" 

Kommentare

  • Dies funktioniert, wenn Sie nur nach einem Erweiterungstyp suchen. Folgendes schlägt fehl: find -name "*.js" -o -name "*.css" -not -path "./directory/*"

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.