#1 Le 14/10/2010, à 10:54
- cracolinux
[✔] Déplacer des fichiers vers le dossier parent avec find
Bonjour,
J'ai ce genre d'arborescence :
/home/toto/dossier1/a/ -lesfichiers
/home/toto/dossier2/a/ -lesfichiers
/home/toto/dossier3/a/ -lesfichiers
/home/toto/dossier4/a/ -lesfichiers
etc.
Je voudrais déplacer les fichiers de ces dossiers dans le dossier parent de façon à avoir ceci (avec le repertoire a/ vidé )
/home/toto/dossier1/ a/
/home/toto/dossier1/lesfichiers
/home/toto/dossier2/ a/
/home/toto/dossier2/lesfichiers
/home/toto/dossier3/ a/
/home/toto/dossier3/ lesfichiers
/home/toto/dossier4/ a/
/home/toto/dossier4/ lesfichiers
j'ai essayé un tas de trucs avec find et mv ...mais je tourne en rond...depuis un bout de temps
a vot' bon coeur !
Dernière modification par cracolinux (Le 01/10/2014, à 07:34)
Hors ligne
#2 Le 14/10/2010, à 11:22
- Postmortem
Re : [✔] Déplacer des fichiers vers le dossier parent avec find
while read fic
do
cd ${fic%/*}
mv ${fic##*/} ..
done < <(find /home/toto/dossier?/a ! -type d)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 14/10/2010, à 13:03
- cracolinux
Re : [✔] Déplacer des fichiers vers le dossier parent avec find
Merci Postmortem!!
Ça marche parfaitement, reste plus qu'a comprendre!!
Hors ligne
#4 Le 14/10/2010, à 13:50
- Postmortem
Re : [✔] Déplacer des fichiers vers le dossier parent avec find
find /home/toto/dossier?/a ! -type d : on recherche tout ce qui n'est pas un dossier dans /home/toto/dossier?/a
<(find /home/toto/dossier?/a ! -type d) : ça envoie la sortie standard de la commande find dans une espèce de fifo ou fichier temporaire (je ne sais pas trop c'est quoi le terme exacte ; voir dans le man bash la partie Process Substitution)
while read fic
do
....
done < fichier : la boucle est exécutée pour chaque ligne de fichier, la variable fic prenant à chaque fois la valeur d'une ligne. Dans notre cas, fichier est <(find /home/toto/dossier?/a ! -type d)
${fic%/*} : ça enlève, à la fin de la valeur de $fic, la plus courte partie correspondant à /* ; ça enlève donc le dernier / et tout ce qu'il y a derrière (équivaut donc à dirname $fic)
${fic##*/} : ça enlève, au début de la valeur de $fic, la plus longue partie correspondant à */ ; ça enlève donc tout jusqu'au dernier / compris (équivaut donc à basename $fic)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 14/10/2010, à 14:29
- cracolinux
Re : [✔] Déplacer des fichiers vers le dossier parent avec find
Merci pour toutes tes explications, particulièrement pour les deux dernières.
Hors ligne