Cette question a déjà des réponses ici :
Commentaires
Réponse
Voici à quoi sert loption -prune
:
find . -type d -name "avoid_this_directory_please" -prune -o -type f -print
Cela dit essentiellement « sil y a » un répertoire appelé avoid_this_directory_please
, ne le saisissez pas, sinon, sil « sagit dun fichier normal, affichez son chemin ».
Commentaires
- Jallais écrire la même chose, légèrement différemment, comme
find . \( -type d -name 'avoid_this_directory_please' -prune \) -o \( -type f -print \)
, mais jaime mieux votre syntaxe. Merci. - @TimKennedy Vous auriez probablement besoin des parenthèses si vous vouliez faire
find . -type d \( -name "A" -o -name "B" \) -prune -o -type f -print
. - bon point. je ne sais même pas où et quand jai appris à le faire avec les parenthèses. cet âge se perd dans la nuit des temps. 🙂
- Ceci éliminera bien sûr tous les répertoires appelés
avoid_this_directory_please
nimporte où dans larborescence, pas seulement ceux de niveau supérieur.-path
permettrait plus de contrôle dans ce domaine, comme la page de manuel ( cité ci-dessous par Xen2050) indique. - Je ne savais pas que
-prune
considérait tout après le premierfind
, y compris-type
et a été intrigué par léchec de lélagage des répertoires avecfind / -type f -path /proc -prune -o -name foo -print
. Voir à la fois-type d
et-type f
dans la même commande est ce qui la fait cliquer pour moi. Maintenant, je me sens enfin en confiance pour utiliserfind
, merci.
Réponse
Pour éviter un répertoire, essayez le test -path:
find . -type f ! -path "*/avoid_this_directory_please/*"
Commentaires
- Notez que alors que cela empêchera les fichiers à lintérieur de
avoid_this_directory_please
dêtre sélectionnés (à moins que leur chemin ne contienne des caractères non valides), cela nempêchera pasfind
de descendre là-dedans . Cest ' pourquoi-prune
est mieux ici. - Cest tellement mieux que dutiliser
prune
. Je dois toujours lire pendant une demi-heure pour comprendre ce que je ne veux pas ' pour trouver, puis associer avec la logique OR pour obtenir les fichiers que je veux. - @Merlin Cela dépend évidemment de ce que vous voulez réaliser. Avec
-prune
,find
a gagné ' t même regarder dans les chemins sélectionnés, tandis quavec! -path
, il entrerait toujours le chemin et examinerait tout.
Réponse
De man find
, dans la section -path
, combinant apparemment les 2 autres réponses
To ignore a whole directory tree, use -prune rather than checking every file in the tree. For example, to skip the directory `src/emacs" and all files and directories under it, and print the names of the other files found, do something like this: find . -path ./src/emacs -prune -o -print
Réponse
Essayez ceci
find -name "*.js" -not -path "./directory/*"
Commentaires
- Cela fonctionne si seulement vous recherchez un type dextension. Les opérations suivantes échoueront:
find -name "*.js" -o -name "*.css" -not -path "./directory/*"
-prune
: cela peut être un peu déroutant. ceci sur stackoverflow explique également pourquoi il ' est si ennuyeux à utiliser.