Questa domanda ha già una risposta qui :

Commenti

  • Ecco ' sa dozzina di domande sui problemi con lutilizzo di -prune: può creare un po di confusione. Inoltre questo su stackoverflow descrive perché ' è una cosa così fastidiosa da usare.
  • Anche se questo è uno stupido, la migliore risposta qui è più chiara della migliore risposta alla " corretta " domanda.
  • Hmm, " find -prune non ' t funziona per me " suoni sicuri diverso da " come faccio a escludere directory dalloutput di ricerca? " a me …
  • @SamB daccordo , questo può ' forse essere un duplicato.

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 primo find argomento, incluso -type ed è rimasto perplesso nel non riuscire a eliminare le directory con find / -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 usare find, 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à a find 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/*"

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *