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 mitfind / -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, dassfind
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
wirdfind
' 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/*"