#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net                                #
############################################################################################
# Script exif_photos_rename_v1.1.sh                                                        #
# Licence : GNU / GPL                                                                      #
############################################################################################
# Renomme les photos selon les données EXIF sous la forme :                                #
# ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.ext  => ex : 2006-11-04_19.41_007.jpg           #
# Fonctionne pour une numérotation de 001 à 999                                            #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite le paquet imagemagick : http://doc.ubuntu-fr.org/imagemagick                #
#  - Nécessite le paquet zenity                                                            #
#    => sudo apt-get install imagemagick 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                         #
############################################################################################
## Variables
nb_param="$#" # nb de paramètres passés au script
erreur=0 # initialisation du compteur d'erreurs à 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 # si fermeture
			exit 1
		fi
			[ $? -ne 0 ] && exit 2 # si annulation
}

## Fonctions renommage des fichiers
rename_jpeg ()
{
	for parametre in "$@"; # pour chaque fichier selectionné
	do # faire
		old_name="$parametre" # on définie le nom du fichier actuel
		date_time=`identify -format "%[EXIF:DateTime]" "$parametre"` # création de la variable date / heure de la photo (ex: 2006:11:04 19:41:30. )
		extension=`echo $parametre | awk -F "." '{print $NF}'` # création de la variable extension du fichier (ex : .jpg)	
		aa=`echo $date_time | cut -d: -f1` # création de la variable année (ex : 2006)
		mm=`echo $date_time | cut -d: -f2` # création de la variable mois (ex : 11)
		jj=`echo $date_time | cut -d: -f3 | cut -c1-2` # création de la variable jour (ex : 04)
		hh=`echo $date_time | cut -d: -f3 | cut -c4-5` # création de la variable heure (ex : 19)
		min=`echo $date_time | cut -d: -f4` # création de la variable minute (ex: 41)
		# création de la variable numérotation	
		if [ $numParam -gt 0 ] && [ $numParam -lt 10 ]; then # pour les paramètres 1 à 9
			numero=00$numParam # rajouter 2 digit => 001, 002, 003,..., 009
		fi
		if [ $numParam -gt 9 ] && [ $numParam -lt 100 ]; then # pour les paramètres 10 à 99
			numero=0$numParam # rajouter 1 digit => 010, 011, 012,..., 099
		fi
		if [ $numParam -gt 100 ] ; then # pour les paramètres supérieur à 100
			numero=$numParam # ne pas rajouter de digit => 100, 101, 102,...
		fi		
		new_nane=`echo ${aa}-${mm}-${jj}_${hh}.${min}_${numero}.${extension}` # on définie le nouveau nom => 2006-11-04_19.41_num.jpg
		cp "$old_name" "${new_nane}" # on renomme le fichier en le copiant
		if [ $? = 0 ] ; then # si la copie a reussi 	
			echo "${old_name} => ${new_nane} .... OK"
			rm -f "$old_name" # => supprime le fichier original
		else # si la copie a echoué
			echo "Impossible de renommer $old_name .... NOK" # => message d'erreur
			let $[erreur += 1] # incrémentation du compteur d'erreur
		fi
		let $[numParam += 1] # incrémentation du numéro de paramètre
	done
	nb_renomme=$(( $nb_param - $erreur )) # création de la variable nombre de fichiers renommés
	echo "-----------------------------------------"		
	echo "Fin de traitement : $# fichiers "
	echo "-----------------------------------------"
	echo "Fichiers renommes : $nb_renomme"
	echo "Fichiers en erreur : $erreur"
	echo "-----------------------------------------"
	echo "OK, vous pouvez fermer !"
}

## Traitement
if [ "$#" -eq 0 ]; then # si aucun fichier n'est selectionné => mesage d'erreur
	zenity --error --title="error" --text="Selectioner au moins 1 fichier"
	exit 1
fi
début_numerot
rename_jpeg "$@" | zenity --text-info --title "exif_photos_rename" --width=500 --height=500
