jpgtimejpgtime a pour but de remplacer la date de dernière modification (qui s'affiche dans les navigateurs de fichiers) des images de type JPEG par la date de la prise de vue, stockée dans les données EXIF de la photographie.
jpgtime est distribué sous licence libre CeCILL.
Une fois le fichier téléchargé, vous devez
sudo mv jpgtime /usr/local/bin/
sudo chmod +x /usr/local/bin/jpgtime
Ce logiciel nécessite l'utilisation de l'utilitaire identify installable sous Ubuntu ou Debian par
sudo aptitude install imagemagick
$ jpgtime -h
Usage : jpgtime [-nvw] [répertoire|fichier ...]
jpgtime -h
Modifie le temps de dernière modification des fichiers de type JPEG donnés en
argument ou contenus dans des répertoires, en fonction de leurs données EXIF.
La recherche des fichiers dans les répertoires est récursive. Seuls les fichiers
de type JPEG sont vérifiés. Sans argument, le répertoire courant est utilisé.
Sans les options -q ou -v, seuls les noms des répertoires et les décomptes de
fichiers à modifier sont affichés.
Options :
-h : afficher cette aide
-n : mode sans écriture ('dry-run'), liste seulement les actions à effectuer
-q : mode silencieux, aucune sortie
-v : mode verbeux complet, affiche la liste de tous les fichiers concernés
#!/bin/bash
# This software is governed by the CeCILL license under French law and
# abiding by the rules of distribution of free software. You can use,
# modify and/ or redistribute the software under the terms of the CeCILL
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt".
#
# Ce logiciel est régi par la licence CeCILL soumise au droit français et
# respectant les principes de diffusion des logiciels libres. Vous pouvez
# utiliser, modifier et/ou redistribuer ce programme sous les conditions
# de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
# à l'adresse "http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt".
#
# Copyright Cyril Ravat, <ravat@free.fr> (2009-11)
# Website : http://www.cyril-ravat.fr/scripts/jpgtime.php
# Help : jpgtime -h
# Options par défaut
# Mode sans action
DRYRUN=
# Mode verbeux
VERBOSE=1
# Options du script
while getopts ":hnqv" option
do
case $option in
"h")
echo -e "Usage : $(basename "$0") [-nvw] [\033[1mrépertoire\033[0m|\033[1mfichier\033[0m ...]"
echo " $(basename "$0") -h"
echo
echo -e "Modifie le temps de dernière modification des \033[1mfichier\033[0ms de type JPEG donnés en"
echo -e "argument ou contenus dans des \033[1mrépertoire\033[0ms, en fonction de leurs données EXIF."
echo
echo -e "La recherche des fichiers dans les \033[1mrépertoire\033[0ms est récursive. Seuls les fichiers"
echo "de type JPEG sont vérifiés. Sans argument, le répertoire courant est utilisé."
echo -e "Sans les options \033[1m-q\033[0m ou \033[1m-v\033[0m, seuls les noms des répertoires et les décomptes de"
echo "fichiers à modifier sont affichés."
echo
echo "Options :"
echo -e " \033[1m-h\033[0m : afficher cette aide"
echo -e " \033[1m-n\033[0m : mode sans écriture ('dry-run'), liste seulement les actions à effectuer"
echo -e " \033[1m-q\033[0m : mode silencieux, aucune sortie"
echo -e " \033[1m-v\033[0m : mode verbeux complet, affiche la liste de tous les fichiers concernés"
echo
exit 0
;;
"n") DRYRUN=1 ; OPTS="${OPTS}n" ;;
"q") VERBOSE=0 ; OPTS="${OPTS}q" ;;
"v") VERBOSE=2 ; OPTS="${OPTS}v" ;;
"?") break ;;
esac
done
shift $((OPTIND-1))
[ -n "$OPTS" ] && OPTS="-$OPTS"
# Vérification de l'utilitaire imagemagick
if [ -z `which identify` ]; then
echo -e "L'utilitaire \033[1midentify\033[0m n'existe pas."
echo -e "Il faut installer le paquet \033[1mimagemagick\033[0m."
exit 1
fi
# Si pas d'argument
[ $# -eq 0 ] && $0 $OPTS . && exit
function time_touch() {
for FICHIER in "$@"; do
# Vérification de l'extension : on n'accepte que les extensions autorisées
EXT=`echo "${FICHIER##*.}" | tr [:upper:] [:lower:]`
[ "$EXT" != "jpg" ] && [ "$EXT" != "jpeg" ] && continue
# Temps
# ATTENTION : ne fonctionne pas avec la version 6.3.7 d'Imagemagick
TIME1=`identify -format "%[EXIF:DateTimeOriginal]" "$FICHIER" 2>/dev/null`
[ -z "$TIME1" ] && TIME1=`identify -format "%[EXIF:DateTime]" "$FICHIER" 2>/dev/null`
# Work around pour la version 6.3.7 d'Imagemagick (jusqu'à Ubuntu Intrepid par exemple)
[ -z "$TIME1" ] && TIME1=`identify -format "%[exif:*]" "$FICHIER" 2>/dev/null | sed -n "/DateTimeOriginal=/s/exif:DateTimeOriginal=//p"`
[ -z "$TIME1" ] && TIME1=`identify -format "%[exif:*]" "$FICHIER" 2>/dev/null | sed -n "/DateTime=/s/exif:DateTime=//p"`
TIME2=`/bin/ls --full-time "$FICHIER" | tr '-' ':' | sed "s/.*\([0-9: ]\{19\}\).*/\1/"`
# Le fichier est concerné
if [ -n "$TIME1" ] && [ "${TIME1}" != "${TIME2}" ] ; then
TIME1=`echo "${TIME1:0:16}.${TIME1:17}" | tr -d ': '`
[ $VERBOSE -ge 1 ] && (( N+=1 ))
[ $VERBOSE = 2 ] && echo -e " Fichier \033[1m$FICHIER\033[0m"
[ $DRYRUN ] || touch -m -t "$TIME1" "$FICHIER" 2>&1
else
[ $VERBOSE -ge 1 ] && (( M+=1 ))
fi
done
}
# Boucle principale
for i in "$@"; do
# Traitement des répertoires
if [ -d "$i" ]; then
N=0
M=0
[ $VERBOSE = 2 ] && echo -e "Répertoire \033[1m$i\033[0m"
for FICHIER in "${i%/}"/*; do
[ -d "$FICHIER" ] && $0 $OPTS "$FICHIER" || time_touch "$FICHIER"
done
[ $VERBOSE -ge 1 ] && (( M+=$N )) && echo -e "Répertoire \033[1m$i\033[0m ($N fichiers concernés sur $M)"
# Traitement des images
else
time_touch "$i"
fi
done