Find : ne pas inclure les sous répertoires ?

Résolu/Fermé
duddy67 - 7 févr. 2009 à 10:13
 duddy67 - 7 févr. 2009 à 11:02
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.
A voir également:

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
7 févr. 2009 à 10:33
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
7 févr. 2009 à 10:34
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
Merci pour vos réponses. J'apprends, j'apprends... ;-)
0