Comment trouver (ou exclure) tous les répertoires et sous-répertoires correspondant à un certain modèle (sous Linux)?

17

J'essaie d'utiliser la commande Linux find pour trouver tous les répertoires et sous-répertoires qui n'ont pas .svn (dossiers cachés Subversion) sur leur chemin. Je peux seulement l'obtenir pour exclure les répertoires .svn eux-mêmes, mais aucun des sous-répertoires.

Voici ce que je fais en ce moment:

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

J'ai aussi essayé:

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

Juste pour info, j'essaie d'utiliser le modèle de recherche pour pouvoir appliquer certaines propriétés de subversion à tous les répertoires de mon référentiel à l'exception des dossiers cachés de subversion et de leurs sous-répertoires (en appliquant la commande exec aux répertoires renvoyés par la commande find ) ..

TIA

Jason Down
la source

Réponses:

25
find . -type d -not \( -name .svn -prune \)
Dan Carley
la source
J'irai avec celui-ci, bien qu'ils semblent tous fonctionner.
Jason Down
J'ai déjà utilisé -prune sur find, mais je n'avais pas vu cette astuce \ (... \). Merci.
Rory
Pouvez-vous dire comment cela fonctionnerait dans une application node.js / express où je souhaite exclure les modules de nœuds du décompte des lignes? J'ai essayé find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l sans succès ...
déchiquetage
En réponse à @shredding concernant les applications Node.js / Express et l'exclusion des répertoires node_modules des résultats de find, cela fonctionne pour moi: find. -name ' .test.js ' -not (-wholename '* node_modules ') ... étant donné que les tests que je veux exécuter sont suffixés avec ".test.js"
mysterlune
Est-ce que cela fonctionnerait sans -type d? J'aime rechercher tous les fichiers mais exclure le répertoire ".git" récursivement
James Mitch
6

Et tout simplement

find . -type d |  grep -v '.svn'
wazoox
la source
Perd votre capacité à utiliser l'une des actions de recherche.
David Pashley
Oui, mais qu'en est-il d'une jolie petite boucle sh à la place? :) pour FILE in find . -type d | grep -v '.svn'; faire écho que ce soit; fait
wazoox
6

Qu'en est-il de l' -pathoption à trouver?

find . -type d ! -path '*.svn*'
Rory
la source
1
Vous avez raté un devis de clôture. Il y a une chance extérieure que les caractères génériques soient trop gourmands.
Dan Carley
2

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


la source
2

Vous pouvez utiliser:

find . -type d -not -wholename '*.svn*' 
idbrii
la source
il a dépouillé le * du début de la réponse ... devrait être trouvé. -type d -not -wholename ' /.svn/ ' (c'est wholename squote astérisque slash dot svn slash astérisque squote)