GNU/Linux >> Linux Esercitazione >  >> Linux

Come escludere una directory in find . comando

Se -prune non funziona per te, questo:

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

Avvertimento: richiede l'attraversamento di tutte le directory indesiderate.


Usa il -prune primario. Ad esempio, se desideri escludere ./misc :

find . -path ./misc -prune -o -name '*.txt' -print

Per escludere più directory, OPPURE tra parentesi.

find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print

E, per escludere directory con un nome specifico a qualsiasi livello, usa -name primary invece di -path .

find . -type d -name node_modules -prune -o -name '*.json' -print

Trovo più facile ragionare su quanto segue rispetto ad altre soluzioni proposte:

find build -not \( -path build/external -prune \) -name \*.js
# you can also exclude multiple paths
find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js

Nota importante: i percorsi digitati dopo -path deve corrispondere esattamente a find verrebbe stampato senza l'esclusione. Se questa frase ti confonde, assicurati di utilizzare percorsi completi attraverso l'tutto comando come questo:find /full/path/ -not \( -path /full/path/exclude/this -prune \) ... . Vedi nota [1] se desideri una migliore comprensione.

Dentro \( e \) è un'espressione che corrisponderà esattamente build/external (vedi la nota importante sopra) e, in caso di successo, eviterà di attraversare qualsiasi punto sottostante . Questo viene quindi raggruppato come una singola espressione con la parentesi di escape e preceduto da -not che farà find salta tutto ciò che è stato abbinato a quell'espressione.

Ci si potrebbe chiedere se aggiungere -not non renderà tutti gli altri file nascosti da -prune riapparire, e la risposta è no. La via -prune funziona è che tutto ciò che, una volta raggiunto, i file al di sotto di quella directory vengono permanentemente ignorati.

Questo deriva da un caso d'uso reale, in cui avevo bisogno di chiamare yui-compressor su alcuni file generati da Wintersmith, ma tralasciando altri file che devono essere inviati così come sono.

Nota [1] :se vuoi escludere /tmp/foo/bar ed esegui find in questo modo "find /tmp \(... " quindi devi specificare -path /tmp/foo/bar . Se invece corri trovi così cd /tmp; find . \(... allora devi specificare -path ./foo/bar .


Linux
  1. Come trovare il numero di file in una directory e sottodirectory

  2. [Linux]:come escludere la directory quando si utilizza il comando shell "tar".

  3. Trova Directory di esclusione?

  4. Come posso escludere una directory dal comando ls

  5. Come posso fare in modo che find escluda la cartella in cui cerca?

Come spostare una directory in Linux

Come escludere in Grep Command in Linux

Come escludere una directory durante la ricerca di file in Linux

Come contare i file nella directory su Linux

Come trovare l'indirizzo IP nella riga di comando di Linux

Il comando Trova Directory di Linux:spiegato