Comment puis-je trouver chaque fichier et répertoire correspondant à un modèle, à l'exception d'un répertoire utilisant find
?
Disons que j'ai la structure de fichiers suivante;
. foo-exclut-moi / foo.txt foo-exclure-moi-pas / foo.txt bar/ foo.txt foobar / bar.txt foofoo.txt
comment pourrais-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:
trouver . -name 'foo-exclude-me' -prune -o -name 'foo *' trouver . -nom 'foo *' \! -path './foo-exclude-me/*'
mais tous 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?
foo-exclude-me
au lieu de./foo-exclude-me
. Essayez également d'ajouter-print
à la fin de la commande.-print
etfoo-exclude-me
au lieu de./foo-exclude-me
.Réponses:
Dans le cas contraire
-print
, l'action implicite par défaut s'applique à chaque correspondance, même à celles élaguées. L'explicite-print
ne s'applique que dans les conditions spécifiées, qui-name 'foo*'
ne se trouvent que dans la branche else de-name 'foo-exclude-me'
.De manière générale, utilisez un explicite
-print
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 fin/
). L'ajout! -path ./foo-exclude-me
fonctionnerait.la source
la source
-prune
est pertinent.-prune
est l'une des options les plus compliquées àfind
provoquer car elle est désactivée-print
(qui est activée par défaut)