Modifier la date de création du fichier à partir des métadonnées JPEG EXIF

29

Lors du téléchargement sur un site ftp, la date de création du fichier d'origine semble être perdue et j'obtiens la date de téléchargement à la place. Cependant, les données Exif du fichier sont correctes. Existe-t-il un outil pour modifier par lots la date de création à partir de la date Exif?

Finn Ove
la source
1
Veuillez envisager d'accepter la réponse que vous trouvez la plus utile. De cette façon, les autres personnes qui rechercheront cette question la verront marquée comme "répondue". C'est aussi un moyen de récompenser une personne qui a passé son temps à vous aider.
Dmitry Grigoryev

Réponses:

27

L'outil de gestion EXIF exiv2a une option intégrée pour cela:

exiv2 -T rename image.jpg

définit l'heure de la dernière modification du fichier mtime, à la date stockée dans les métadonnées EXIF.

Vous avez demandé d'utiliser l'heure de création - mais celle-ci n'est pas utilisée dans les systèmes de type Unix - et il y a de bonnes raisons à cela: /unix/27297/why-doesnt-nix-keep-track -of-file-creation-time

Je suis presque sûr que l'heure à laquelle vous appelez create time est en fait mtime- pas de problème là-bas.


De man exiv2:

NAME
        exiv2 - Image metadata manipulation tool

 SYNOPSIS
        exiv2 [options] [action] file ...

 DESCRIPTION
        exiv2 is a program to read and write Exif, IPTC and XMP image metadata and image com‐
        ments. The following image formats are supported:

 [ ... ]

 mv | rename
       Rename files and/or set file timestamps according to the Exif create time‐
       stamp.  Uses  the  value  of  tag  Exif.Photo.DateTimeOriginal  or, if not
       present, Exif.Image.DateTime to determine the timestamp. The filename for‐
       mat can be set with -r fmt, timestamp options are -t and -T.

 [ ... ]

 -T     Only  set  the  file  timestamp according to the Exif create timestamp, do not
        rename the file (overrides -k). This option is only  used  with  the  'rename'
        action.  Note:  On Windows you may have to set the TZ environment variable for
        this option to work correctly.


Voir l'option -tpour faire le contraire.

Volker Siegel
la source
J'interpréterais "opposé" comme signifiant définir l'horodatage EXIF ​​à partir de l'horodatage du fichier, mais ce n'est pas ce qui -tfait. En fait, il semble réellement faire un surensemble de ce qui se -Tpasse.
Michael
7

Si vous installez l'exiftool à partir de CPAN, vous pouvez exécuter le script suivant, en supposant que tous vos fichiers se trouvent dans un répertoire appelé "tous"

#!/bin/sh
for i in all/*; do
    SPEC=`exiftool -t -s -d "%Y-%m-%d %H:%M:%S" -CreateDate "$i"`
    read X DATE <<<${SPEC}
    echo "$i:$DATE"
    touch -d "$DATE" "$i"
done
Joel Taylor
la source
pouvez-vous décrire ce que fait ce script? En particulier les exiftool
arguments
5

En supposant, comme mentionné par «Volker Siegel», que vous voulez probablement dire mtime, j'utiliserais simplement la fonction intégrée d'exiftools.

comme:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

cela prendra les informations du "champ exif" DateTimeOriginal "et les utilisera pour définir les informations de date / heure modifiées du système de fichiers du fichier" test.jpg ".

Exemple:

$ ls -la test.jpg
-rw-r-----@ 1 user  18329968  2432451 14 Out 17:57 test.jpg

$ exiftool -DateTimeOriginal test.jpg
Date/Time Original              : 2015:10:09 13:29:58

$ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg
    1 image files updated

$ ls -la test.jpg
-rw-r-----@ 1 user  18329968  2432451  9 Out 13:29 test.jpg
6ugr3
la source
4

Il peut également être fait en utilisant la jheadcommande:

$ jhead -ft file.jpg
SkyRaT
la source
Pour Jhead 3.0, l'option est -dsft. -ftfait le contraire.
Tesquin Crydd
jhead semble être le seul outil EXIF ​​qui ne mouille pas avec l'en-tête EXIF ​​- exiftool et exiv2 augmentent en fait la taille du fichier et déplacent les en-têtes, ce qui est totalement inacceptable pour moi.
Michael
3

ExifTool peut lire et manipuler la plupart des informations EXIF, y compris l'extraction des balises Date / Time Original ou Create Data EXIF. Vous pouvez utiliser ces informations pour renommer les fichiers ou modifier leurs horodatages. Par exemple:

find -name '*.jpg' | while read PIC; do
    DATE=$(exiftool -p '$DateTimeOriginal' $PIC |
    sed 's/[: ]//g')
    touch -t $(echo $DATE | sed 's/\(..$\)/\.\1/') $PIC
done

Cela trouvera tous les fichiers JPG dans le répertoire actuel et mettra à jour les horodatages.

Si vous souhaitez également donner à ces fichiers un nom basé sur cette date (cela a tendance à être utile), ajoutez-le également mv -i $PIC $(dirname $PIC)/$DATE.jpgavant la doneligne.

krowe
la source