GNU/Linux >> Tutoriels Linux >  >> Linux

Exclure le répertoire dans Rechercher ?

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.


Linux
  1. Trouver des fichiers en double ?

  2. Rechercher le répertoire d'exclusion ?

  3. Copier les premiers fichiers N dans un répertoire différent ?

  4. Comment exclure un répertoire dans find . commande

  5. Rechercher et renommer un répertoire

Comment compter les fichiers dans le répertoire sous Linux

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

Supprimer les fichiers et les répertoires par leurs noms. Aucun fichier ou répertoire de ce nom?

Fichiers Cat avec répertoire ?

La commande Linux find Directory :Explication

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