web-dev-qa-db-fra.com

Est-il possible d'exclure un répertoire de la commande find?

J'utilise find -type f commande pour rechercher récursivement tous les fichiers d'un certain répertoire de départ. Cependant, j'aimerais que certains répertoires ne puissent pas entrer et extraire les noms de fichiers à l'intérieur. Donc, fondamentalement, je cherche quelque chose comme:

find . -type f ! -name "avoid_this_directory_please"

Existe-t-il une alternative fonctionnelle à cela?

31
user219860

C'est ce que le -Prune l'option est pour:

find . -type d -name "avoid_this_directory_please" -Prune -o -type f -print

Cela dit essentiellement "s'il y a un répertoire appelé avoid_this_directory_please, ne le saisissez pas, sinon, s'il s'agit d'un fichier normal, imprimez son chemin ".

37
Kusalananda

Pour éviter un répertoire, essayez le test -path:

find . -type f ! -path '*/avoid_this_directory_please/*'
10
Stephen Rauch

De man find, dans le -path section, 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
7
Xen2050

Essaye ça

find -name "*.js" -not -path "./directory/*"
5