Comment puis-je trouver chaque fichier et répertoire correspondant à un modèle, à l'exception d'un répertoire en utilisant find
?
Supposons que j'ai la structure de fichiers suivante ;
. foo-exclude-me/ foo.txt foo-exclude-me-not/ foo.txt bar/ foo.txt foobar/ bar.txt foofoo.txt
comment puis-je obtenir la sortie suivante en utilisant find
:
./bar/foo.txt ./bar/foobar ./bar/foobar/foofoo.txt ./foo-exclude-me-not ./foo-exclude-me-not/foo.txt
J'ai essayé d'utiliser les deux commandes suivantes :
find . -name 'foo-exclude-me' -prune -o -name 'foo*' find . -name 'foo*' ! -path './foo-exclude-me/*'
mais les deux renvoient ceci :
./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt
Comment puis-je exclure correctement le foo-exclude-me
répertoire ?
Réponse acceptée :
find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print
Sans -print
, l'action implicite par défaut s'applique à toutes les correspondances, même celles qui ont été élaguées. Le -print
explicite s'applique uniquement dans les conditions spécifiées, qui sont -name 'foo*'
uniquement dans la branche else de -name 'foo-exclude-me'
.
De manière générale, utilisez un -print
explicite chaque fois que vous faites quelque chose de plus complexe qu'une conjonction de prédicats.
Votre deuxième tentative avec ! -path './foo-exclude-me/*'
n'a pas fonctionné car ./foo-exclude-me
ne correspond pas à ./foo-exclude-me/*
(pas de /
à la fin ). Ajout de ! -path ./foo-exclude-me
fonctionnerait.