Renommer les fichiers JPEG avec la date de capture

Les appareils photo numériques utilisent souvent un nombre incrémental pour nommer les fichiers. Je préfère que le nom indique la date et l’heure plutôt qu’un nombre insignifiant comme P1020729.JPG. Aussi selon que le fichier provienne de mon téléphone intelligent ou de mon appareil photo, l’extension varie de .JPG à .jpg. Le script ci-dessous résoud ces deux problèmes automatiquement.

J’utilise l’outil jhead pour lire l’entête Exif:

# pkg_add jhead
$ cat ~/bin/renommer-date
#!/bin/ksh
#
## Script pour renommer les fichiers JPEG avec la date et l'heure de capture

renommer() {

filename=$1

# Lire la date et heure de l'entête Exif, retirer les espaces et TAB au début et à la fin
datetime="$(jhead $filename | grep 'Date/Time' | awk 'BEGIN { FS="[:]"} \
    {print $2$3$4$5$6}' | sed 's/^[     ]*//;s/[    ]*$//' )"
date="$(echo $datetime | cut -d ' ' -f 1)"
heure="$(echo $datetime | cut -d ' ' -f 2)"
gdt="$date"_"$heure"

nom="$(echo $filename | awk -F"." '{print $1}')"
extension="$(echo $filename | awk -F"." '{print $NF}')"

# Valider qu'il s'agit d'une image JPEG
if [ $(echo $extension | grep -E "jpg|JPG|jpeg|JPEG") ];
then
    # Renommer le fichier RAW s'il existe
    if test -f $nom.RW2; then
        mv $nom.RW2 $gdt.RW2;
    fi
    # Renommer le fichier JPEG
    mv $filename $gdt.jpg;
else
    echo "$filename n'est pas un fichier JPEG";
fi
}

for file in "$@";
do
    renommer "$file";
done

Références:

http://www.sentex.net/~mwandel/jhead/

gPhoto

Le logiciel gphoto disponible dans les ports permet d’importer les photos et de les renommer automatiquement avec l’argument gphoto --filename [source]. Il faut par contre donner les droits à l’utilisateur pour le port USB.

La technique présentée ici a l’avantage de pouvoir copier les photos d’une caméra numérique avec les commandes du système OpenBSD de base sans installer de port.