GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exclure un répertoire dans find . commande

Si -prune ne fonctionne pas pour vous, ceci :

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

Mise en garde : nécessite de parcourir tous les répertoires indésirables.


Utilisez le -prune primaire. Par exemple, si vous souhaitez exclure ./misc :

find . -path ./misc -prune -o -name '*.txt' -print

Pour exclure plusieurs répertoires, OR entre parenthèses.

find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print

Et, pour exclure les répertoires avec un nom spécifique à n'importe quel niveau, utilisez le -name primaire au lieu de -path .

find . -type d -name node_modules -prune -o -name '*.json' -print

Je trouve les solutions suivantes plus faciles à raisonner que les autres solutions proposées :

find build -not \( -path build/external -prune \) -name \*.js
# you can also exclude multiple paths
find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js

Remarque importante : les chemins que vous tapez après -path doit correspondre exactement à ce find serait imprimer sans l'exclusion. Si cette phrase vous confond, assurez-vous simplement d'utiliser des chemins complets à travers le tout commande comme celle-ci :find /full/path/ -not \( -path /full/path/exclude/this -prune \) ... . Voir la note [1] si vous souhaitez une meilleure compréhension.

À l'intérieur de \( et \) est une expression qui correspondra exactement build/external (voir la note importante ci-dessus) et, en cas de succès, évitera de traverser quoi que ce soit ci-dessous . Ceci est ensuite regroupé en une seule expression avec la parenthèse échappée et préfixé par -not ce qui fera find ignorez tout ce qui correspond à cette expression.

On pourrait se demander si l'ajout de -not ne masquera pas tous les autres fichiers par -prune réapparaître, et la réponse est non. Le chemin -prune fonctionne est que tout ce qui, une fois qu'il est atteint, les fichiers sous ce répertoire sont définitivement ignorés.

Cela vient d'un cas d'utilisation réel, où j'avais besoin d'appeler yui-compressor sur certains fichiers générés par wintersmith, mais de laisser de côté les autres fichiers qui doivent être envoyés tels quels.

Remarque [1] :Si vous souhaitez exclure /tmp/foo/bar et vous lancez find comme ceci "find /tmp \(... " alors vous devez spécifier -path /tmp/foo/bar . Si par contre vous exécutez find comme ceci cd /tmp; find . \(... alors vous devez spécifier -path ./foo/bar .


Linux
  1. Exclure le répertoire dans Rechercher ?

  2. Rechercher le répertoire d'exclusion ?

  3. Shell - Comment trouver le répertoire d'une commande ?

  4. Comment puis-je exclure un répertoire de la commande ls

  5. Comment puis-je faire en sorte que find exclut le dossier dans lequel il recherche?

Comment déplacer un répertoire sous Linux

Comment exclure dans la commande Grep sous Linux

Comment exclure un répertoire lors de la recherche de fichiers sous Linux

Comment compter les fichiers dans le répertoire sous Linux

Comment trouver une adresse IP dans la ligne de commande Linux

La commande Linux find Directory :Explication