Renommer des photos sans utiliser les métadonnées Exif.
De retour de vacances, il n’est pas rare de se retrouver avec répertoire contenant plus de 400 photos avec des noms de fichiers du genre:
dsc_0007.jpg
dsc_0009.jpg
dsc_0016.jpg
Or on souhaite que les noms soient plus explicites, genre «2010-07-vancances-numéro.jpg»
Faire des modifications une par une est fastidieux, c’est là qu’intervient la commande «sed»
On va utiliser une boucle «for, do, done», J’ai déjà donné les explications sur le billet « Initiation au shell boucle (for, do, done) » (la punition de mon fils).
Voici la ligne magique avec la commande «sed»:
for i in dsc_*; do mv $i `echo $i | sed "/^dsc_/s//2010-07-vacances-/"`; done
« dsc_ » sera remplacé par « 2010-07-vacances- »
Ce qui donnera des noms de fichier du genre :
2010-07-vacances-0007.jpg
2010-07-vacances-0009.jpg
2010-07-vacances-0016.jpg
Pour éviter de retaper la ligne on peut faire un mini script:
#!/bin/bash
# renommer des photos dans le répertoire courant.
echo "Entrez ce que vous souhaitez remplacer, ex. dsc_, DSC ..."
echo "Gardez la numérotation finale des photos..."
echo -n "respectez les la casse, majuscules / Minuscules : "
read rempl
echo -n "Entrez ce que vous souhaitez voir à la place : "
read souhait
for i in "$rempl"*
do mv $i `echo $i | sed "/^"$rempl"/s//"$souhait"/"`
done
echo "TERMINE"
On va le nommer « renom-photos.sh »
Le rendre exécutable par:
chmod +x renom-photos.sh
Plaçons-le dans le répertoire courant et utilisons-le.
Voyons ce qu’il y a dans le répertoire courant.
$ ls -l
total 10764
-rwxr-xr-x 1 sima78 sima78 2231659 2010-06-13 16:07 DSC_0007.JPG
-rwxr-xr-x 1 sima78 sima78 2720329 2010-06-13 16:09 DSC_0009.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 DSC_0016.JPG
-rwxr-xr-x 1 sima78 sima78 383 2010-08-17 20:55 renom-photos.sh
-rwxr-xr-x 1 sima78 sima78 2036985 2010-06-18 15:03 souhait0015.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 souhait0016.JPG
On voit aussi le script qui se termine par .sh et je souhaite renommer mes photos DSC_*
Je lance le script et réponds au 2 questions…
$ ./renom-fotos.sh
Entrez ce que vous souhaitez remplacer, ex. dsc_, DSC ... (ici se serait DSC_)
Gardez la numérotation finale des photos...
respectez les la casse, majuscules / Minuscules : DSC_
Entrez ce que vous souhaitez voir à la place : 2010-07-vacances-
TERMINE
Voyons le résultat.
$ ls -l
total 10764
-rwxr-xr-x 1 sima78 sima78 2231659 2010-06-13 16:07 2010-07-vacances-0007.JPG
-rwxr-xr-x 1 sima78 sima78 2720329 2010-06-13 16:09 2010-07-vacances-0009.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 2010-07-vacances-0016.JPG
-rwxr-xr-x 1 sima78 sima78 383 2010-08-17 20:55 renom-fotos.sh
-rwxr-xr-x 1 sima78 sima78 2036985 2010-06-18 15:03 souhait0015.JPG
-rwxr-xr-x 1 sima78 sima78 1996609 2010-06-18 15:04 souhait0016.JPG
drwxr-xr-x 2 sima78 sima78 4096 2010-08-17 20:50 sous-photos
Il a donc bien modifier les fichiers commençant par « DSC_ »
Maintenant, tout ça peut être perfectionné… à vos shells.

C’est toujours plus simple de travailler sur des fichiers n’ayant pas d’espace dans leur nom, alors voici un petit script qui permet de remplacer à la volée les espaces par des « _ ».
Nouveau départ du blog Sima78