Questa domanda ha già una risposta qui :
Commenti
Risposta
Questo è ciò a cui serve lopzione -prune
:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Questo fondamentalmente dice “se cè” una directory chiamato avoid_this_directory_please
, non inserirlo, altrimenti, se “è un file normale, stampa il suo percorso”.
Commenti
- Stavo per scrivere la stessa cosa, in modo leggermente diverso, di
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, ma mi piace di più la tua sintassi. Grazie. - @TimKennedy Probabilmente avresti bisogno dei genitori se volessi fare
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
. - buon punto. Non ' non so nemmeno quando / dove ho imparato a farlo con le parentesi. quelletà si perde nella notte dei tempi. 🙂
- Questo ovviamente eliminerà tutte le directory chiamate
avoid_this_directory_please
ovunque nellalbero, non solo quelle di primo livello.-path
consentirebbe un maggiore controllo in questo, poiché la pagina man ( citato di seguito da Xen2050) afferma. - Non sapevo che
-prune
avesse considerato tutto dopo il primofind
argomento, incluso-type
ed è rimasto perplesso nel non riuscire a eliminare le directory confind / -type f -path /proc -prune -o -name foo -print
. Vedere sia-type d
e-type f
nello stesso comando è ciò che ha fatto clic per me. Ora finalmente mi sento sicuro di usarefind
, grazie.
Risposta
Per evitare una directory prova il test -path:
find . -type f ! -path "*/avoid_this_directory_please/*"
Commenti
- Nota che sebbene impedisca la selezione dei file allinterno di
avoid_this_directory_please
(a meno che il loro percorso non contenga caratteri non validi), non impedirà afind
di scendere lì . Ecco ' perché-prune
è meglio qui. - Questo è tremendamente molto meglio che usare
prune
. Devo sempre leggere per mezzora per capire specificando cosa non voglio ' per trovare e poi accoppiarlo con la logica OR per ottenere i file che voglio. - @Merlin Ovviamente dipende da cosa vuoi ottenere. Con
-prune
,find
non ha ' nemmeno guardare nei percorsi selezionati, mentre con! -path
, entrerà comunque nel percorso ed esaminerà tutto.
Risposta
Da man find
, nella sezione -path
, apparentemente combinando le altre 2 risposte
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
Risposta
Prova
find -name "*.js" -not -path "./directory/*"
Commenti
- Funziona se stai cercando solo un tipo di estensione. Quanto segue avrà esito negativo:
find -name "*.js" -o -name "*.css" -not -path "./directory/*"
-prune
: può creare un po di confusione. Inoltre questo su stackoverflow descrive perché ' è una cosa così fastidiosa da usare.