#1 Le 19/07/2010, à 15:24
- erlik
Modifier des chemins à la volée
Hello
Je cherche a renommer à la volée les chemins de fichiers pour que la 1ère lettre de chaque dossier et du fichier soit en majuscule, de manière récursive
Par ex, de "Data/meshes/test/test.jpg", le fichier soit deplacé, et renommé en "Data/Meshes/Test/Test.jpg".
Je connais bien sur find pour rechercher les fichiers, mv pour les deplacer, mais par contre pour passer la 1ere lettre de chaque élément en maj .........
Merci
Je ne suis pas un geek! Je suis un être humain!
Hors ligne
#2 Le 19/07/2010, à 19:00
- nesthib
Re : Modifier des chemins à la volée
regarde du côté de la commande rename
ps. sinon le future ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 19/07/2010, à 21:15
- Hizoka
Re : Modifier des chemins à la volée
tu peux essayer de récupérer les noms des dossiers en variables et ainsi utiliser :
${var^}
pour mettre la 1ere lettre en maj
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 19/07/2010, à 23:10
- nesthib
Re : Modifier des chemins à la volée
attention bash >= 4 seulement
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 20/07/2010, à 00:55
- alej
Re : Modifier des chemins à la volée
J'pense qu'entre sed et dirname, tu devrais t'en sortir...
$ echo "Data/meshes/test/test.jpg"|sed 's:\/\(.\):\/\u\1:g'
Data/Meshes/Test/Test.jpg
... sans trop te casser la tête
Hors ligne
#6 Le 20/07/2010, à 12:42
- erlik
Re : Modifier des chemins à la volée
Merci pour vos réponses. Pour le moment, je travaille sur ce code:
for i in `find -type f`; do mv -f "$i" "$(echo -E $i | sed -r 's/(^.|\/.)/\U&/g')"; done
Mais il y a qlq problèmes.
D'abord, je n'arrive pas a forcer la création de l'arborescence sans passer par un mkdir -p .
Ensuite, ça ne marche pas si le chemin presente un espace, celui-ci étant coupé au niveau de l'espace. Par ex (en mofiant le code ci-dessus)
$ for i in `find -type f`; do echo -E "${i}" | sed -r 's/\/./\U&/g' ; done
./Data/Textures/Middle
Class/Class.jpg
au lieu de "./Data/Textures/Middle class/Class.jpg"
EDIT : j'ai réglé ce pb d'espace, du a la boucle for, en changeant la variable IFS
OLD_IFS="$IFS"
IFS=$'\n'
Dernière modification par erlik (Le 20/07/2010, à 12:51)
Je ne suis pas un geek! Je suis un être humain!
Hors ligne
#7 Le 20/07/2010, à 14:19
- Hizoka
Re : Modifier des chemins à la volée
normalement rename te permet de faire en une fois : echo -E "${i}" | sed -r 's/\/./\U&/g'
pour la boucle, pour<quoi ne pas utiliser while read line ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#8 Le 20/07/2010, à 15:57
- nesthib
Re : Modifier des chemins à la volée
+1, là tu fais une compilation des erreurs les plus fréquentes en bash (ce qui est normal si tu débutes )
avec ceci au lieu d'une boucle for tu t'éviteras bien des soucis :
while read line; do
ma_commande "${line}"
done < <(commande)
ou encore utilise find l'option -exec
sinon ton "echo … | sed …" est remplaçable par ceci (minuscules puis 1ère lettre en maj) :
VAR='/aB/cDEfgH/IjKLmN/o.PqR'
sed -r 's#/.#\U&#g' <<<${VAR,,}
à toi de combiner ces deux choses
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#9 Le 20/07/2010, à 16:37
- alej
Re : Modifier des chemins à la volée
Google est mon (notre ) ami...
$ tree
.
└── Data
└── des meshes
└── un test
└── une image.jpg
$ find . -depth -exec rename 's/(.*)\/([^\/]*)/$1\/\u$2/' {} \;
$ tree
.
└── Data
└── Des meshes
└── Un test
└── Une image.jpg
Hors ligne
#10 Le 20/07/2010, à 17:34
- Hizoka
Re : Modifier des chemins à la volée
pas mal ca le tree, je ne connaissais pas
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#11 Le 20/07/2010, à 18:03
- alej
Re : Modifier des chemins à la volée
pas mal ca le tree
Je suis fana de ce truc. Et en +, y'a des couleurs et tout...
Hors ligne