Cambiar la fecha de creación del archivo a partir de metadatos JPEG EXIF

29

Cuando se carga en un sitio ftp, la fecha de creación del archivo original parece haberse perdido, y en su lugar obtengo la fecha de carga. Sin embargo, los datos Exif en el archivo son correctos. ¿Existe una herramienta para cambiar por lotes la fecha de creación de la fecha Exif?

Finn Ove
fuente
1
Considere aceptar la respuesta que le resulte más útil. De esta manera, otras personas que busquen esta pregunta la verán marcada como "respondida". También es una forma de recompensar a una persona que ha dedicado su tiempo a ayudarlo.
Dmitry Grigoryev

Respuestas:

27

La herramienta de manejo EXIF exiv2tiene una opción integrada para esto:

exiv2 -T rename image.jpg

establece la hora de la última modificación del archivo,, mtimea la fecha almacenada en los metadatos EXIF.

Solicitó usar el tiempo de creación, pero eso no se usa en sistemas similares a Unix, y hay buenas razones para ello: /unix/27297/why-doesnt-nix-keep-track -de-tiempo-creación-de-archivo

Estoy bastante seguro de que el momento en que llamas crear tiempo es realmente mtime, no hay problema allí.


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.


Ver opción -tpara hacer lo contrario.

Volker Siegel
fuente
Interpretaría que "opuesto" significa establecer la marca de tiempo EXIF ​​de la marca de tiempo del archivo, pero esto no es lo que -thace. De hecho, parece hacer un superconjunto de lo que -Thace.
Michael
7

Si instala el exiftool desde CPAN, puede ejecutar el siguiente script, suponiendo que todos sus archivos estén en un directorio llamado "todos"

#!/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
fuente
¿Puedes describir lo que está haciendo este script? En particular, los exiftool
argumentos
5

Asumiendo, como lo menciona 'Volker Siegel', que probablemente te refieres a mtime, simplemente usaría la función incorporada de exiftools.

me gusta:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

esto tomará la información del "campo exif" DateTimeOriginal "y la usará para configurar la información de fecha / hora modificada del sistema de archivos" test.jpg ".

Ejemplo:

$ 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
fuente
4

También se puede hacer usando el jheadcomando:

$ jhead -ft file.jpg
SkyRaT
fuente
Para Jhead 3.0 la opción es -dsft. -fthace lo contrario
Tesquin Crydd el
jhead parece ser la única herramienta EXIF ​​que no funciona con el encabezado EXIF: exiftool y exiv2 en realidad aumentan el tamaño del archivo y mueven los encabezados, lo cual es totalmente inaceptable para mí.
Michael
3

ExifTool puede leer y manipular la mayoría de la información EXIF, incluida la extracción de las etiquetas de Fecha / Hora original o Crear datos EXIF. Puede usar esta información para cambiar el nombre de los archivos o cambiar sus marcas de tiempo. Por ejemplo:

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

Esto encontrará todos los archivos JPG en el directorio actual y actualizará las marcas de tiempo.

Si también desea asignar un nombre a esos archivos en función de esa fecha (esto suele ser útil), agregue también mv -i $PIC $(dirname $PIC)/$DATE.jpgantes de la donelínea.

krowe
fuente