Come posso trovare (o escludere) tutte le directory e le sottodirectory che corrispondono a un determinato modello (in Linux)?


17

Sto cercando di usare il comando find di Linux per trovare tutte le directory e le sottodirectory che non hanno .svn (cartelle nascoste Subversion) nel loro percorso. Posso ottenerlo solo per escludere le stesse directory .svn stesse, ma non nessuna delle sottodirectory.

Ecco cosa sto facendo in questo momento:

find . -type d \! -iname '*.svn*'

Ho anche provato:

find . -type d \! iname '.svn' \! iname '.svn/*'

Solo un FYI, sto provando a usare il modello find in modo da poter applicare alcune proprietà di sovversione a tutte le directory nel mio repository escludendo le cartelle nascoste di sovversione e le loro sottodirectory (applicando il comando exec alle directory restituite dal comando find ) ..

TIA

Risposte:


25
find . -type d -not \( -name .svn -prune \)

Vado con questo, anche se sembravano funzionare tutti.
Jason Down,

Ho usato -prune su find prima, ma non avevo visto quel trucco \ (... \). Grazie.
Rory,

Puoi dire come funzionerebbe in un'app node.js / express in cui desidero escludere i moduli del nodo dal conteggio delle righe? Ho provato find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l senza successo ...
distruggendo il

In risposta a @shredding riguardante le app Node.js / Express ed escludendo le directory node_modules dai risultati di find, questo funziona per me: find. -name ' .test.js ' -not (-wholename '* node_modules ') ... dato che i test che voglio eseguire sono suffissati con ".test.js"
mysterlune

Funzionerebbe senza il -type d? Mi piace cercare tutti i file ma escludo ricorsivamente la directory ".git"
James Mitch,

6

Che dire semplicemente

find . -type d |  grep -v '.svn'

Perde la capacità di utilizzare una qualsiasi delle azioni di ricerca.
David Pashley,

Sì, ma che ne dici di un bel piccolo ciclo sh invece? :) per FILE in find . -type d | grep -v '.svn'; fai eco a qualunque cosa; fatto
wazoox,

6

Che dire -pathdell'opzione da trovare?

find . -type d ! -path '*.svn*'

1
Perso una citazione di chiusura. C'è una possibilità esterna che i caratteri jolly possano essere troppo avidi.
Dan Carley,

2

trova . -path './tmp' -prune -o .......


2

Puoi usare:

find . -type d -not -wholename '*.svn*' 

ha rimosso il * dalla parte anteriore della risposta ... dovrebbe essere trovato. -type d -not -wholename ' /.svn/ ' (questo è il nome intero squalo asterisco barra spunta punto svn barra asterisco barra)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.