Modifier la date de prise de vue de tout un lot avec ExifTool

exiftool ‘-AllDates+=0:2:0 0’ photos/ décale de deux mois les trois tags de date que les logiciels de gestion de photos lisent pour classer les images : DateTimeOriginal, CreateDate et ModifyDate. La commande ne répond que deux lignes de bilan :
Sommaire
- La date de prise de vue est un tag EXIF, pas la date du fichier
- Décaler une série : la date d’abord, l’heure ensuite
- +=0:1:0 ajoute une minute, pas un mois
- Sur un JPEG sans EXIF, la commande réussit sans rien changer
- Un décalage en mois devient un nombre fixe de secondes pour tout le lot
- La date du fichier repart à l’heure de la commande
- Les valeurs refusées à l’écriture et leurs messages exacts
- Revenir en arrière après un essai raté
- Questions fréquentes
1 directories scanned
2 image files updated
Ce bilan ne dit pas quels fichiers ne portaient aucune date, et il ne dit pas que la date de modification de chaque fichier vient d’être remplacée par l’heure de la commande. Ces deux effets n’apparaissent qu’au contrôle.
La date de prise de vue est un tag EXIF, pas la date du fichier
La première commande à lancer sur un lot sert à savoir ce que les fichiers contiennent réellement :
exiftool -time:all -a -G0:1 -s photos/
Sur un JPEG issu d’un appareil photo, la sortie se présente ainsi avec ExifTool 13.55 :
[File:System] FileModifyDate : 2026:09:19 13:58:36+07:00
[File:System] FileAccessDate : 2026:09:19 13:58:36+07:00
[File:System] FileInodeChangeDate : 2026:09:19 13:58:36+07:00
[EXIF:ExifIFD] DateTimeOriginal : 2024:05:12 10:00:00
Les lignes [File:System] décrivent le fichier dans le système de fichiers, la ligne [EXIF:ExifIFD] décrit l’image elle-même. DateTimeOriginal est rempli par l’appareil au déclenchement ; c’est cette valeur que les visionneuses et les catalogues affichent comme date de prise de vue. L’option -a est indispensable pour voir les tags de même nom rangés dans des groupes différents, et -G0:1 fait apparaître le groupe de chacun.
Dans un lot hétérogène, deux populations se mélangent : les photos d’appareil ou de téléphone ont DateTimeOriginal, tandis que les captures d’écran, les images exportées par un logiciel de bureautique ou les fichiers déjà retouchés peuvent n’avoir aucune date EXIF. Le décalage ne se comporte pas de la même façon sur les deux.
Décaler une série : la date d’abord, l’heure ensuite
Un décalage s’écrit en deux champs séparés par une espace : le premier porte sur la date, au format années:mois:jours, le second sur l’heure, au format heures:minutes:secondes. ExifTool reçoit l’argument entre guillemets, car il contient un signe égal et une espace.
-
Vérifier les dates présentes, comme ci-dessus, pour repérer les fichiers sans EXIF.
exiftool -time:all -a -G0:1 -s photos/À l’écran : une ligne DateTimeOriginal par fichier qui en possède une, aucune pour les autres.
-
Lancer le décalage sans l’option
-overwrite_original, pour qu’ExifTool conserve une copie de chaque fichier avant réécriture.exiftool '-AllDates+=0:2:0 0' photos/À l’écran :
1 directories scanned, puis le nombre de fichiers modifiés sous la forme2 image files updated. -
Contrôler le résultat fichier par fichier.
exiftool -DateTimeOriginal -s -T photos/À l’écran : une valeur par ligne, sans nom de tag, les fichiers sans date restant absents de la liste.
-
Aligner la date du système de fichiers sur la date EXIF, si le classement par date de fichier compte aussi.
exiftool -overwrite_original '-FileModifyDate<DateTimeOriginal' photos/À l’écran :
1 directories scannedet le nombre de fichiers mis à jour. Les guillemets simples sont obligatoires sous Debian et Ubuntu, à cause du caractère<interprété par le shell.
La même syntaxe sert à poser une date fixe. Pour une horloge d’appareil remise à zéro, la documentation officielle d’ExifTool donne l’exemple suivant, qui ajoute 5 ans, 10 mois, 2 jours, 10 heures et 48 minutes :
exiftool "-DateTimeOriginal+=5:10:2 10:48:0" photos/
| Écriture du décalage | Sens pour une valeur date et heure | Résultat constaté |
|---|---|---|
+=1:30 |
1 heure et 30 minutes | 2024:05:12 10:00:00 devient 2024:05:12 11:30:00 |
+=0:1:0 |
0 heure, 1 minute, 0 seconde | 2024:05:12 10:00:00 devient 2024:05:12 10:01:00 |
+=0:1:0 0 |
1 mois, aucun décalage horaire | 2024:05:12 10:01:00 devient 2024:06:12 10:01:00 |
+=1:0:0 0 |
1 an | 2024:06:12 10:01:00 devient 2025:06:12 10:01:00 |
+=5:10:2 10:48:0 |
5 ans, 10 mois, 2 jours, 10 h 48 min | 2025:06:12 10:01:00 devient 2031:04:14 20:49:00 |
+=0:1:0 ajoute une minute, pas un mois
Quand un seul champ est fourni et que la valeur visée contient une heure, ExifTool l’interprète comme une heure, jamais comme une date. Le piège se referme sans aucun message d’avertissement : sur un fichier daté 2024:05:12 10:00:00, la commande exiftool -DateTimeOriginal+=0:1:0 photo.jpg donne 2024:05:12 10:01:00, soit une minute de plus, et affiche simplement 1 image files updated. Pour obtenir un mois, il faut deux champs, le second valant zéro : '-DateTimeOriginal+=0:1:0 0' mène à 2024:06:12 10:01:00. La règle est la même pour les années, où +=1:0:0 déplace d’une heure et non d’un an.
Sur un JPEG sans EXIF, la commande réussit sans rien changer
Un décalage modifie la valeur existante d’un tag ; il ne le crée pas. Lancé sur trois JPEG sans métadonnées, exiftool -AllDates+=1 photos/ se termine avec le code de retour 0, sans avertissement, et affiche :
1 directories scanned
0 image files updated
3 image files unchanged
La documentation officielle d’ExifTool le confirme pour le cas particulier : -datetimeoriginal+=1 reste sans effet si le tag DateTimeOriginal n’existe pas dans l’image. Pour voir quels fichiers ont été ignorés, l’option -v0 affiche le détail :
exiftool -AllDates+=1 -v0 photos/
À l’écran, chaque fichier précédé de ========, et pour ceux qui n’ont pas bougé la ligne Nothing changed in photo2.jpg. Si la date est absente du fichier, il faut l’écrire avec un signe égal et non un décalage, par exemple exiftool '-DateTimeOriginal=2024:05:12 10:00:00' photos/, qui crée le bloc EXIF manquant.
Un décalage en mois devient un nombre fixe de secondes pour tout le lot
Le décalage calendaire n’est calculé qu’une fois, sur le premier fichier rencontré, puis converti en secondes et appliqué tel quel aux suivants. ExifTool documente ce choix dans le module Shift.pl : décaler d’un mois vaut entre 28 et 31 jours selon la date de départ, et l’outil privilégie un écart constant sur toute la série. Deux fichiers datés 2024:01:31 10:00:00 et 2024:03:15 10:00:00, décalés ensemble de 0:1:0 0, sont ainsi devenus 2024:03:02 10:00:00 et 2024:04:15 10:00:00, soit un écart de 31 jours pour les deux, avec débordement de fin de mois sur le premier. Un décalage en heures ou en jours, comme une horloge d’appareil en retard, ne pose pas ce problème.
La date du fichier repart à l’heure de la commande
Écrire dans un fichier remet à l’instant présent ses dates système, sauf indication contraire. Sur un fichier dont la date de modification valait 2021:03:04 08:00:00, un décalage des tags EXIF l’a fait passer à 2026:09:19 14:00:16. Deux options corrigent ce comportement :
exiftool -AllDates+=1 -P photos/
exiftool '-FileModifyDate<DateTimeOriginal' photos/
La première, -P, conserve la date de modification d’origine ; la seconde la fixe sur la date EXIF, ce qui est le geste attendu quand on répare un lot mal daté. La date système porte un décalage horaire, par exemple 2019:08:14 11:30:00+07:00, alors que DateTimeOriginal n’en porte aucun : les deux valeurs se comparent donc sur les six premiers champs.
Les valeurs refusées à l’écriture et leurs messages exacts
Une valeur de date incomplète est rejetée avec ce message, tel qu’il s’affiche en ExifTool 13.55 :
Warning: Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z]) in ExifIFD:DateTimeOriginal (PrintConvInv)
Nothing to do.
La cause est une valeur sans heure, comme 2022:01:02, ou une chaîne qui n’est pas une date, comme hier. Le code de sortie vaut alors 1. Écrire la même date seule sans -overwrite_original produit une variante plus discrète, avec un code de sortie 0 :
Warning: Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z]) in ExifIFD:DateTimeOriginal (PrintConvInv)
0 image files updated
1 image files unchanged
Une valeur hors bornes donne un message spécifique au champ fautif, du type Warning: Month '13' out of range 1..12 in ExifIFD:DateTimeOriginal (PrintConvInv) ou Warning: Hour '25' out of range 0..24 in ExifIFD:CreateDate (PrintConvInv). Ces avertissements restent en anglais même avec l’option -lang fr, la traduction des messages n’étant pas implémentée dans ExifTool.
Revenir en arrière après un essai raté
Sans l’option -overwrite_original, chaque fichier réécrit laisse une copie nommée photo.jpg_original. Un nouveau décalage se cumule avec le précédent, il faut donc restaurer plutôt que relancer à l’envers :
exiftool -restore_original photos/
exiftool -delete_original photos/
La restauration affiche 1 image files found puis, s’il n’existe aucune sauvegarde, 0 original files found. La suppression des copies demande une confirmation avant d’agir, et l’option -overwrite_original supprime d’emblée cette possibilité de retour.
Questions fréquentes
Comment ne traiter que les photos prises après une date donnée ? L’option -if évalue une condition par fichier. Pour ne décaler que les images postérieures au 1er mai 2024 : exiftool -AllDates+=2 -if '$DateTimeOriginal ge "2024:05:01"' photos/. Le bilan compte séparément les fichiers écartés, sous la forme 2 files failed condition, et le code de sortie vaut 2 si tous les fichiers échouent à la condition.
Comment inclure les sous-dossiers, et seulement certains formats ? -r descend dans l’arborescence et -ext jpg restreint le traitement à une extension, sans tenir compte de la casse : exiftool -r -ext jpg -AllDates+=2 photos/. Quand un nom de dossier est passé en écriture, ExifTool ne traite de lui-même que les formats modifiables ; les sous-dossiers dont le nom commence par un point sont ignorés, sauf avec -r..
Comment poser la même date sur tout un lot ? Un signe égal remplace la valeur au lieu de la décaler : exiftool '-DateTimeOriginal=2024:05:12 10:00:00' photos/. Sur des JPEG dépourvus d’EXIF, cette forme crée le tag, contrairement à +=. Le fichier doit tout de même être d’un format inscriptible, ce qui est le cas du JPEG, du TIFF, du PNG, du HEIC et des RAW Canon CR2, Nikon NEF, Sony ARW et DNG d’après le tableau officiel des formats pris en charge.
Quelles versions d’ExifTool trouve-t-on sous Debian et Ubuntu ? Le paquet se nomme libimage-exiftool-perl et fournit la commande exiftool. Debian 12 (bookworm) livre la version 12.57, Debian 13 (trixie) la 13.25, et Ubuntu 24.04 la 12.76. La version amont 13.59 est datée du 27 mai 2026 sur le site d’ExifTool ; les sorties reproduites ici ont été observées avec la version 13.55. La mise en place d’un dépôt à jour est décrite dans la page consacrée aux dépôts APT.