Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile

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 wink

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. roll

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... tongue
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]

Totor a écrit :

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 wink, 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]

Alain.g a écrit :

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 wink


-- Lucid Lynx --

Hors ligne

#11 Le 14/08/2008, à 18:51

soupaloignon

Re : Script bash pour modifier des noms de fichiers [résolu]

Totor a écrit :

Le maître est de retour wink

C'est un tueur ce type big_smile


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