Création
d'entreprise
Posez votre question Signaler

Find : ne pas inclure les sous répertoires ? [Résolu]

duddy67 - Dernière réponse le 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.
Lire la suite 

Find : ne pas inclure les sous répertoires »

3 réponses
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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...
duddy67 - 7 févr. 2009 à 11:02
Merci pour vos réponses. J'apprends, j'apprends... ;-)
Ajouter un commentaire
Ce document intitulé « find : ne pas inclure les sous répertoires ? » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?