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.

Bonjour Sima, moi tu me dis « A ton shell », je monte en shell tout de suite.
Je préfère utiliser le shell avec ce qu’il sait faire tout seul, pas besoin de [sed], [bash] sait tout faire tout seul :
Pour remplacer « dsc_ » par « 2010-07-vacances- », une seule goutte pardon, une seule ligne suffit :
for old in *dsc* ; do mv « ${old} » « ${old/dsc/2010-07-vacances-} »; done
Je suis un esprit simple! 😉
Bien vu !
Bonne remarque sur l’utilisation du shell, qui évite un appel à
sed. Petite nuance toutefois :*dsc*et${old/dsc/...}ne reproduisent pas exactement le comportement initial, car ils remplacentdscn’importe où dans le nom alors que la commande d’origine cible uniquement le préfixedsc_.Pour conserver le même résultat, on peut écrire :
for old in dsc_*; do mv "$old" "${old/#dsc_/2010-07-vacances-}"; done.#indique que le remplacement ne s’effectue qu’au début du nom, ce qui correspond précisément au sed initial.Bien vu également, j’ai vu cela après coup, mais on ne peut pas modifier ses propres commentaires, et je ne connais pas la syntaxe de « texte enrichi » à utiliser pour ces commentaires. Est-ce du markdown?
J’ai triché, je répondu depuis mon interface admin qui est enrichie… Cela-dit tu peux essayer un commentaire « test », juste pour tester, avec du markdown que je supprimerai ensuite.
Tout à fait, et c’est déjà ce que j’avais testé : Si tu regardes mon commentaire d’hier sur l’autre sujet « Renommer les photos par lot en utilisant les métadonnées EXIF », tu constateras que j’avais eu l’idée de tester du markdown = et bien ça ne marche pas.
Je pense que tu peux obtenir pour les commentaires d’autoriser du texte enrichi sous quelque syntaxe améliorée en ajoutant un module WordPress. Moi, sous Drupal, j’utilisais CKedit.