Modifica la data di creazione del file dai metadati JPEG EXIF


29

Quando si carica su un sito ftp, la data di creazione del file originale sembra essere andata persa e ottengo invece la data di caricamento. Tuttavia, i dati Exif nel file sono corretti. Esiste uno strumento per modificare in batch la data di creazione dalla data Exif?


1
Ti preghiamo di considerare di accettare la risposta che ritieni più utile. In questo modo, altre persone che cercano questa domanda la vedranno contrassegnata come "risposta". È anche un modo per premiare una persona che ha trascorso il suo tempo ad aiutarti.
Dmitry Grigoryev,

Risposte:


27

Lo strumento di gestione EXIF exiv2ha un'opzione integrata per questo:

exiv2 -T rename image.jpg

imposta l'ora dell'ultima modifica del file mtime, sulla data memorizzata nei metadati EXIF.

Hai chiesto di utilizzare il tempo di creazione, ma che non viene utilizzato nei sistemi simili a Unix, e ci sono buone ragioni per questo: /unix/27297/why-doesnt-nix-keep-track -di-file-creazione-time

Sono abbastanza sicuro che il tempo che chiami crea time sia effettivamente mtime- nessun problema lì.


Da 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.


Vedi l'opzione -tper fare il contrario.


Interpreterei "opposto" nel senso di impostare il timestamp EXIF ​​dal timestamp del file, ma non è questo che -tfa. In effetti, sembra effettivamente fare un superset di ciò che -Tfa.
Michael,

7

Se installi exiftool da CPAN puoi eseguire il seguente script, supponendo che tutti i tuoi file siano in una directory chiamata "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

puoi descrivere cosa sta facendo questo script? In particolare gli argomenti perexiftool
user5359531

5

Supponendo, come menzionato da "Volker Siegel", che probabilmente intendi mtime, utilizzerei semplicemente la funzione integrata exiftools.

piace:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

questo prenderà le informazioni "DateTimeOriginal" del "campo exif" e le userà per impostare le informazioni di data / ora modificate del filesystem del file "test.jpg".

Esempio:

$ 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

4

Può anche essere fatto usando il jheadcomando:

$ jhead -ft file.jpg

Per Jhead 3.0 l'opzione è -dsft. -ftfa il contrario.
Tesquin Crydd,

jhead sembra essere l' unico strumento EXIF ​​che non funziona con l'intestazione EXIF: exiftool ed exiv2 aumentano effettivamente le dimensioni del file e spostano le intestazioni, il che è assolutamente inaccettabile per me.
Michael,

3

ExifTool è in grado di leggere e manipolare la maggior parte delle informazioni EXIF, incluso l'estrazione dei tag EXIF ​​Data / Time Original o Create Data. È possibile utilizzare queste informazioni per rinominare i file o modificare i loro timestamp. Per esempio:

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

Questo troverà tutti i file JPG nella directory corrente e aggiornerà i timestamp.

Se vuoi anche dare un nome a quei file in base a quella data (questo tende a tornare utile), aggiungi anche mv -i $PIC $(dirname $PIC)/$DATE.jpgprima della doneriga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.