En cette période de congés estivales, j'ai pu me replonger dans ce script que je voulais mettre à jour depuis un petit moment. Il permet de renommer massivement (via les nautilus-scripts) une série de photos selon les données EXIF sous la forme 20061104_19.41_007.jpg.
La première modification concerne l'utilisation de l'utilitaire exiftool en lieu et place de imagemagick qui posait souci avec Ubuntu 8.04 LTS Hardy Heron. En effet avec la version native Hardy de imagemagick certaines commandes ne fonctionnaient plus, notamment la commande identify -format "%[EXIF:DateTime] qui retournait une ligne vide (voir le nota bene 3 à la fin de ce post). En outre je trouve que le traitement du script est plus rapide avec exiftool...
La deuxième modification concerne l'affichage d'une boite de dialogue qui permet de suivre l'état d'avancement du traitement en pourcentage, bien plus clean que le déroulement du script dans la fenêtre zenity...
Dépendances :
$ sudo apt-get install libimage-exiftool-perl zenity
Script exif_photos_rename_v1.2.sh :
- 09/07/08 - v1.2
- Remplacement de imagemagick par exiftool pour le traitement
- Ajout boîte de dialogue de barre de progression en pourcentage
- 27/07/07 - v1.1
- Script de renommage de photos selon les données EXIF
- Réorganisation
- Choix du début de numérotation, par défaut à 1
- 15/07/07 - v1.0
- Création
#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net #
############################################################################################
# Script exif_photos_rename_v1.2.sh #
# Licence : GNU / GPL #
############################################################################################
# Renomme les photos selon les données EXIF sous la forme : #
# ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.ext => ex : 20061104_19.41_007.jpg #
# Fonctionne pour une numérotation de 001 à 999 #
############################################################################################
# Dépendances #
############################################################################################
# - Nécessite le paquet exiftool : http://www.sno.phy.queensu.ca/~phil/exiftool/ #
# - Nécessite le paquet zenity : http://library.gnome.org/users/zenity/index.html.fr #
# => sudo apt-get install libimage-exiftool-perl zenity #
############################################################################################
# 15/07/07 - v1.0 - Création #
# 27/07/07 - v1.1 - Réorganisation #
# - Choix du début de numérotation, par défaut à 1 #
# 09/07/08 - v1.2 - Remplacement de imagemagick par exiftool pour le traitement #
# - Ajout boîte de dialogue de barre de progression en pourcentage #
############################################################################################
## Variables
nb_param="$#"
erreur=0
typeset -i CNT=1
typeset -i CUR=0
## Fonctions début de numérotation
début_numerot ()
{
numParam=`zenity --title "Début de numérotation" --entry-text="1" --entry --text "Par défaut à 1, à modifier le cas échéant :"`
if [ $? != 0 ]; then
exit 1
fi
[ $? -ne 0 ] & exit 2 # Annulation
}
## Fonctions renommage des fichiers
rename_jpeg ()
{
for parametre in "$@";
do
old_name="$parametre"
date_time=`exiftool "$parametre" | grep "Create Date"`
extension=`echo $parametre | awk -F "." '{print $NF}'`
aa=`echo $date_time | cut -d: -f2 | cut -c2-5`
mm=`echo $date_time | cut -d: -f3`
jj=`echo $date_time | cut -d: -f4 | cut -c1-2`
hh=`echo $date_time | cut -d: -f4 | cut -c4-5`
min=`echo $date_time | cut -d: -f5`
if [ $numParam -gt 0 ] & [ $numParam -lt 10 ]; then
numero=00$numParam
fi
if [ $numParam -gt 9 ] & [ $numParam -lt 100 ]; then
numero=0$numParam
fi
if [ $numParam -gt 100 ] ; then
numero=$numParam
fi
new_nane=`echo ${aa}${mm}${jj}_${hh}.${min}_${numero}.${extension}`
cp "$old_name" "${new_nane}"
if [ $? = 0 ] ; then
echo "${old_name} => ${new_nane} .... OK" >> /tmp/exif_photos_rename.log
rm -f "$old_name"
else
echo "Impossible de renommer $old_name .... NOK" >> /tmp/exif_photos_rename.log
let $[erreur += 1]
fi
CUR=$CNT*100/$nb_param
echo $CUR
echo "#Traitement de $nb_param photos\n${old_name} => ${new_nane} ... en cours\n\nAvancement: $CUR %\n "
CNT=$CNT+1
let $[numParam += 1]
done
nb_renomme=$(( $nb_param - $erreur ))
if [ $erreur != 0 ] ; then
touch /tmp/exif_photos_rename.err
echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\n _!!_ Cliquer sur Valider pour afficher le rapport de traitement _!!_\n"
else
echo "#Fin de traitement : $nb_param fichiers\n\nFichiers renommés : $nb_renomme\nFichiers impossible à renommer : $erreur\n\nOK, vous pouvez fermer en cliquant sur Valider !\n"
fi
}
## Fonctions affichage du rapport de traitement
affich_log ()
{
if [ -f /tmp/exif_photos_rename.err ] ; then
cat /tmp/exif_photos_rename.log | zenity --text-info --title "/tmp/exif_photos_rename.log" --width=500 --height=500
fi
rm -f /tmp/exif_photos_rename.log
rm -f /tmp/exif_photos_rename.err
}
## Traitement
if [ "$#" -eq 0 ]; then
zenity --error --title="error" --text="Selectioner au moins 1 fichier"
exit 1
fi
début_numerot
rename_jpeg "$@" | zenity --progress --title="exif_photos_rename" --percentage=0
affich_log
Mise en place :
Placer le script exif_photos_rename_v1.2.sh dans le dossier ~/.gnome2/nautilus-scripts, puis le rendre exécutable
$ sudo chmod +x ~/.gnome2/nautilus-scripts/exif_photos_rename_v1.2.sh
Utilisation :
Sélectionner les photos à traiter, puis clic droit / Scripts / exif_photos_rename_v1.2.sh
Cliquer sur Valider ou modifier le début de numérotation le cas échéant :
Le traitement s'effectue, l'état d'avancement en pourcentage s'affiche :
A la fin du traitement :
1. Si aucune erreur n'est détectée, une petite récap s'affiche
2. Si des fichiers n'ont pu être renommés :
Résultat :
NB 1 : _/!\_ Par principe de précaution, je vous conseille de commencer à utiliser un script qui, au final supprime ou modifie un fichier, sur une copie de vos photos, histoire de voir que tout se passe bien
NB 2 : Suite à un commentaire de Batchajan sur mon post sur exif_photos_rename_v1.1, j'ai également attaché à ce billet une variante de mon script, exiftool_v1.0.sh. Batchajan l'a en effet modifié pour rajouter les fonctions suivantes :
- Eviter le rerenommage d'une photo déjà moulinée
- Classer les photos renommées dans les répertoires aaaa/aaaa-mm
Merci à Batchajan pour ces modifications, elles pourront être utiles...
NB 3 : Utilisant imagemagick dans d'autres scripts sur mon Ubuntu 8.04 Hardy Heron, notamment PhpWebGallery_create, j'ai du compiler la dernière version stable de imagemagick à partir des sources :
sudo apt-get install libfontconfig1-dev libjpeg62-dev libpng12-dev librsvg2-dev libtiff4-dev libjasper-dev libwmf-dev "télécharger la dernière version de ImageMagick-6.4.xx" => ftp://ftp.fu-berlin.de/unix/X11/graphics/ImageMagick/ tar -xvzf ImageMagick-6.4.xx cd ImageMagick-6.4.xx ./configure make sudo make install