Altera a data de criação do arquivo a partir dos metadados JPEG EXIF

25

Ao fazer o upload para um site de ftp, a data de criação do arquivo original parece perdida, e eu recebo a data de upload. No entanto, os dados Exif no arquivo estão corretos. Existe uma ferramenta para alterar em lote a data criada a partir da data Exif?

    
por Finn Ove 03.09.2013 / 16:19

5 respostas

25

A ferramenta de manipulação EXIF exiv2 tem uma opção incorporada para isso:

exiv2 -T rename image.jpg

define a hora da última modificação do arquivo, mtime , para a data armazenada nos metadados EXIF.

Você pediu para usar o tempo de criação - mas isso não é usado em sistemas semelhantes ao Unix - e há boas razões para isso: link

Tenho certeza de que o tempo que você chama de tempo de criação é, na verdade, mtime - não tem problema.


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.


Veja a opção -t para fazer o oposto.

    
por 03.09.2014 / 06:47
7

Se você instalar o exiftool do CPAN, poderá executar o seguinte script, supondo que todos os seus arquivos estejam em um diretório chamado "all"

#!/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
    
por 03.09.2013 / 18:04
4

Assumindo, como mencionado por 'Volker Siegel', que você provavelmente quer dizer mtime, eu usaria exiftools builtin function simples.

como:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

isto irá pegar as informações "exif field" DateTimeOriginal "e usá-las para configurar as informações de data / hora modificadas do sistema de arquivos do arquivo" test.jpg ".

Exemplo:

$ 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
    
por 25.10.2015 / 17:43
3

O ExifTool pode ler e manipular a maioria das informações EXIF, incluindo a extração das tags Data / Time Original ou Create Data EXIF. Você pode usar essas informações para renomear os arquivos ou alterar seus timestamps. Por exemplo:

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

Isso localizará todos os arquivos JPG no diretório atual e atualizará os timestamps.

Se você quiser também dar a esses arquivos um nome baseado nessa data (isso tende a ser útil) e adicione mv -i $PIC $(dirname $PIC)/$DATE.jpg antes da linha done .

    
por 03.09.2013 / 17:53
3

Também pode ser feito usando o comando jhead :

$ jhead -ft file.jpg
    
por 19.06.2016 / 17:01