jpgtime
jpgtime
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, <[email protected]> (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