#1 Le 13/08/2008, à 15:32
- willom
Script bash pour modifier des noms de fichiers [résolu]
Bonjour,
Je dois faire un script qui me permette de modifier des noms de fichiers dans un répertoire.
Les fichiers sont de cette forme :
f001d524-e74f-7944-b2f8-469b3845e220monnomdefichier.truc
Et je dois me retrouver sous cette forme :
f001d524-e74f-7944-b2f8-469b3845e220
J'ai fait un petit script qui marche pas trop mal, mais qui bug pour certains fichiers du fait de certains caractères compris dans le nom...
Voici mon script :
#!/bin/bash
for fichier in *; do
nouveau=`echo $fichier | cut -c1-36`
rename "s/$fichier/$nouveau/" ./
done
Comment faire pour ne pas qu'il interprête ces caractères spéciaux? (espaces, parenthèses etc...)
Je pensais qu'il n'y avait que quelques fichiers sur les 4500 fichiers qui auraient ce problème, me permettant de changer les quelques récalcitrants à la main, et en fait il y'en a beaucoup plus (beaucoup plus...). Il me faut donc trouve une solution... ou bien si quelqu'un est motivé je luis passe mon dossier et il me renomme tout à la main ;-)
Merci d'avance...
Dernière modification par willom (Le 13/08/2008, à 15:53)
Hors ligne
#2 Le 13/08/2008, à 15:43
- Totor
Re : Script bash pour modifier des noms de fichiers [résolu]
je ne saisi pas trop ton
rename "s/$fichier/$nouveau/" ./
j'ai l'impression qu'il y a un mélange de rename et sed...
mais bon :
#!/bin/bash
for fichier in *; do
nouveau="`echo "$fichier" | cut -c1-36`"
mv "${fichier}" "${nouveau}"
done
devrait résoudre ton affaire.
-- Lucid Lynx --
Hors ligne
#3 Le 13/08/2008, à 15:50
- willom
Re : Script bash pour modifier des noms de fichiers [résolu]
Moi aussi ça me semble un peu louche, mais j'avais trouvé ça sur un forum (pas ici), et à prioris ça avait l'air d'être fonctionnel...
Enfin sinon ton code marche impeccable...
Merci beaucoup
edit : J'me souviens en fait c'est pas dans un forum que j'ai trouvé ça, c'est dans le man de rename... Il met un exemple comme ça :
For example, to rename all files matching "*.bak" to strip the extension, you might say
rename 's/\.bak$//' *.bak
Donc j'ai fait confiance au man
Dernière modification par willom (Le 13/08/2008, à 15:51)
Hors ligne
#4 Le 13/08/2008, à 16:01
- Totor
Re : Script bash pour modifier des noms de fichiers [résolu]
Il y a quelque chose qui m'étonne : c'est que le for fichier in * ne plante pas avec 4500 fichiers car cela devrait "exploser" le buffer de la ligne de commande... surtout que les fichiers ont des noms assez longs.
Dernière modification par Totor (Le 13/08/2008, à 16:10)
-- Lucid Lynx --
Hors ligne
#5 Le 14/08/2008, à 03:05
- soupaloignon
Re : Script bash pour modifier des noms de fichiers [résolu]
Hello,
Totor, ton script garde l'extension apres exécution ? (.truc dans l'exemple)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#6 Le 14/08/2008, à 09:17
- willom
Re : Script bash pour modifier des noms de fichiers [résolu]
Non ça ne garde pas l'extension...
Et non, ça ne plante pas, c'est vrai aussi que j'étais sceptique sur le
for fichier in *
Mais ça marche...
donc merci encore
Hors ligne
#7 Le 14/08/2008, à 10:07
- Totor
Re : Script bash pour modifier des noms de fichiers [résolu]
Nop, tout comme l'a demandé willom, il ne conserve que les 36 premiers caractères du fichier.
si tu veux qu'il conserve l'extension, remplace nouveau="`echo "$fichier" | cut -c1-36`" par nouveau="`echo "$fichier" | sed "s/^\([^.]\{1,36\}\).*\(\..*\)$/\1\2/"`"
-- Lucid Lynx --
Hors ligne
#8 Le 14/08/2008, à 16:49
- soupaloignon
Re : Script bash pour modifier des noms de fichiers [résolu]
Nop, tout comme l'a demandé willom, il ne conserve que les 36 premiers caractères du fichier.
si tu veux qu'il conserve l'extension, remplace nouveau="`echo "$fichier" | cut -c1-36`" par nouveau="`echo "$fichier" | sed "s/^\([^.]\{1,36\}\).*\(\..*\)$/\1\2/"`"
Merci pour l'info, je vais tester ça.
Tant que je te tiens , et sans vouloir polluer ce fil, comme tu as l'air de taquiner en bash, est ce que tu pourrais jeter un coup d'oeil à ce post ?
http://forum.ubuntu-fr.org/viewtopic.php?pid=1995499
Merci d'avance
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#9 Le 14/08/2008, à 17:47
- Alain.g
Re : Script bash pour modifier des noms de fichiers [résolu]
Salut
Avec rename (sans faire de boucle) :
rename 's/^(.{36}).*$/$1/' *
En conservant l'extension :
rename 's/^(.{36}).*\./$1./' *
Xubuntu Karmic !
Hors ligne
#10 Le 14/08/2008, à 18:25
- Totor
Re : Script bash pour modifier des noms de fichiers [résolu]
Salut
Avec rename (sans faire de boucle) :
rename 's/^(.{36}).*$/$1/' *
En conservant l'extension :
rename 's/^(.{36}).*\./$1./' *
Le maître est de retour
-- Lucid Lynx --
Hors ligne
#11 Le 14/08/2008, à 18:51
- soupaloignon
Re : Script bash pour modifier des noms de fichiers [résolu]
Le maître est de retour
C'est un tueur ce type
Edit : j'ai mis un complément d'info par rapport a xclip
Dernière modification par soupaloignon (Le 14/08/2008, à 18:52)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne