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

Réponses:


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

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'

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*'

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 .......


2

Vous pouvez utiliser:

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

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.