(bash) scripter pour renommer

Fermé
fractalux Messages postés 6 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 18 janvier 2010 - 25 oct. 2009 à 15:48
 fractalux - 28 oct. 2009 à 17:03
Bonjour,
je débute en bash et je voulais faire le script suivant.

J'ai une liste d'images avec plein de noms différents "imageski004.JPG, photo 1.jpg, etc."

et je voulais les renommer ainsi

titre_01.jpg
titre_02.jpg
etc.

où "titre" est passé en argument

./renomimg titre

J'ai commencé :

#! /bin/bash

# Mise en minuscules .JPG > .jpg
for i in *.JPG 
	do mv "`echo $i`" "`echo $i | sed "/.JPG/s//.jpg/"`" ; 
done

k=1 ;

# image-au-pif.jpg en titre_1.jpg
for i in *.jpg
	do mv "`echo $i`" "`echo "$1_$k.jpg"`" ;
	let "k=$k + 1"
done


mais là, ça donne titre_1.jpg, titre_2.jpg, etc.

Je bloque un peu pour leur donner la forme titre_01.jpg (ou titre_001.jpg)

Je pensais faire un truc du genre

do mv "`echo $i`" "`echo $i.jpg | sed "/_(nb d'1 seul chiffre).jpg/s//_0(le même chiffre).jpg/"`" ; 


Mais je ne sais pas quoi mettre dans les parenthèses !

4 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 oct. 2009 à 19:09
Salut,

Essaie ça
J'ai créer deux fichiers selon ton exemple et j'ai mis un contenu pour vérifier.
Tu peux configurer le format de printf en fonction de nombre de tes photos.

$ ls -l
total 8
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 imageski004.JPG
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 photo 1.jpg
$ cat imageski004.JPG
image
lami20j@debian:~/jpg$ cat photo\ 1.jpg
photo
$ l=0;for i in $(ls *.[Jj][Pp][Gg]|tr " "  _);do l=$(($l+1));mv -v "${i/_/ }" "$(printf "titre_%04d.jpg" $l)";done
`imageski004.JPG' -> `titre_0001.jpg'
`photo 1.jpg' -> `titre_0002.jpg'
$ ls -l
total 8
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 titre_0001.jpg
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 titre_0002.jpg
$ cat titre_0001.jpg
image
$ cat titre_0002.jpg
photo


0
ok merci.

Du coup mon code ressemble à ça.

# Mise en minuscules .JPG > .jpg
for i in *.JPG  ; 
	do mv "`echo $i`" "`echo $i | sed "/.JPG/s//.jpg/"`" ;  
done

k=1 ;

for i in *.jpg
	do mv -v "$i" "$(printf "$1_%03d.jpg" $k)" ;
	let "k=$k + 1" ;
done


Je vais essayer d'adapter mon nombre de chiffres en fonction du nombre d'images...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 oct. 2009 à 06:03
Salut,

As-tu essayé la commande que je t'ai donnée?
Elle fait ce que tu demandes.
C'est inutile la partie minuscules pour l'extension. Il suffit de chercher les JPG et jpg et le renommer avec l'extension jpg tout simplement.
Pas besoin de les renommer d'abord en jpg et ensuite en titre_NNN.jpg
0
Oui oui, c'est grâce à toi que j'ai fait ce script. C'est vrai que c'est inutile de renommer en minuscule. J'ai adapté ce que tu m'as donné parce que je voulais utiliser $1 au lieu de "titre" dans le code et que je m'emmêlais avec les " " et "_".

Merci beaucoup en tout cas...
0