Find : ne pas inclure les sous répertoires ?

Résolu
duddy67 -  
 duddy67 -
Bonjour,

J'ai de nouveau un petit pb avec la commande find.

Quand je veux déplacer tous les fichiers txt de dir1 vers dir2 je fais:

find /path/dir1 -name '*.txt' -exec mv {} /path/dir1/dir2 \; 2>/dev/null

jusque là c'est bon.
Maintenant supposons que j'ai de nouveaux fichiers txt dans dir1 et que je veuille cette fois les déplacer dans dir3:

find /path/dir1 -name '*.txt' -exec mv {} /path/dir1/dir3 \; 2>/dev/null

et là pb car tous les fichiers txt, même ceux qui étaient dans dir2, se retrouvent dans dir3.
J'ai vu que l'option -prune de find n'incluait pas les sous répertoires
mais ça ne marche pas chez moi.

Quelqu'un pourrait m'aider ?

Merci.
Configuration: Linux
Firefox 3.0.3

2 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    $ find duddy67/ -name '*.txt' | sort
    duddy67/dir1/fic1.txt
    duddy67/dir1/fic2.txt
    duddy67/dir1/fic3.txt
    duddy67/dir1/fic4.txt
    duddy67/dir1/fic5.txt
    duddy67/dir1/fic6.txt
    duddy67/dir2/fic1.txt
    duddy67/dir2/fic2.txt
    duddy67/dir2/fic3.txt
    duddy67/dir3/fic1.txt
    duddy67/dir3/fic2.txt
    duddy67/dir3/fic3.txt
    $ find duddy67/ -path 'duddy67/dir2' -prune -o -name '*.txt'|sort
    duddy67/dir1/fic1.txt
    duddy67/dir1/fic2.txt
    duddy67/dir1/fic3.txt
    duddy67/dir1/fic4.txt
    duddy67/dir1/fic5.txt
    duddy67/dir1/fic6.txt
    duddy67/dir2
    duddy67/dir3/fic1.txt
    duddy67/dir3/fic2.txt
    duddy67/dir3/fic3.txt
    $ find duddy67/dir1 -path 'duddy67/dir2' -prune -o -name '*.txt' -exec mv -v {} duddy67/dir3 \;
    `duddy67/dir1/fic5.txt' -> `duddy67/dir3/fic5.txt'
    `duddy67/dir1/fic1.txt' -> `duddy67/dir3/fic1.txt'
    `duddy67/dir1/fic6.txt' -> `duddy67/dir3/fic6.txt'
    `duddy67/dir1/fic3.txt' -> `duddy67/dir3/fic3.txt'
    `duddy67/dir1/fic4.txt' -> `duddy67/dir3/fic4.txt'
    `duddy67/dir1/fic2.txt' -> `duddy67/dir3/fic2.txt'
    $ find duddy67/ -name '*.txt' | sort
    duddy67/dir2/fic1.txt
    duddy67/dir2/fic2.txt
    duddy67/dir2/fic3.txt
    duddy67/dir3/fic1.txt
    duddy67/dir3/fic2.txt
    duddy67/dir3/fic3.txt
    duddy67/dir3/fic4.txt
    duddy67/dir3/fic5.txt
    duddy67/dir3/fic6.txt
    
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Utilises plutôt l'option "-maxdepth n" :
    find /path/dir1 -maxdepth 1 -name '*.txt' -exec mv {} /path/dir1/dir2 \; 2>/dev/null 
    L'option "-prune" étant beaucoup plus complexe qu'elle n'en a l'air à utiliser et n'a pas du tout l'utilité de la description faite par le "man find".

    Par exemple pour exclure le rep "dir2" de ta recherche :
    find /path/dir1 \( -name dir2 -prune \) -o \( -name '*.txt' \) -exec mv {} /path/dir1/dir3 \; 2>/dev/null
    devrait le faire...
    0
    1. duddy67
       
      Merci pour vos réponses. J'apprends, j'apprends... ;-)
      0