Zmień datę utworzenia pliku na podstawie metadanych JPEG EXIF


29

Podczas przesyłania do witryny ftp data utworzenia oryginalnego pliku wydaje się być utracona, a zamiast tego otrzymuję datę przesłania. Jednak dane Exif w pliku są poprawne. Czy istnieje narzędzie do wsadowej zmiany daty utworzenia od daty Exif?


1
Proszę rozważyć odpowiedź, która jest dla Ciebie najbardziej pomocna. W ten sposób inne osoby, które będą wyszukiwać to pytanie, będą oznaczone jako „udzielone odpowiedzi”. To także sposób na nagrodzenie osoby, która spędziła czas, pomagając ci.
Dmitrij Grigoriew

Odpowiedzi:


27

Narzędzie obsługi EXIF exiv2ma wbudowaną opcję:

exiv2 -T rename image.jpg

ustawia czas ostatniej modyfikacji pliku mtime, na datę zapisaną w metadanych EXIF.

Poprosiłeś o wykorzystanie czasu tworzenia - ale nie jest to używane w systemach uniksopodobnych - i istnieją ku temu dobre powody: /unix/27297/why-doesnt-nix-keep-track Czas tworzenia pliku

Jestem prawie pewien, że czas, w którym dzwonisz, tworzy czas mtime- nie ma problemu.


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


Zobacz opcję -tprzeciwną.


Zinterpretowałbym „przeciwny”, aby oznaczać ustawienie znacznika czasu EXIF ​​na podstawie znacznika czasu pliku, ale nie to -trobi. W rzeczywistości wydaje się, że robi to nadzbiór tego, co -Trobi.
Michael

7

Jeśli zainstalujesz exiftool z CPAN, możesz uruchomić następujący skrypt, zakładając, że wszystkie twoje pliki znajdują się w katalogu o nazwie „wszystkie”

#!/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

czy możesz opisać, co robi ten skrypt? W szczególności argumenty dlaexiftool
user5359531

5

Zakładając, jak wspomniał „Volker Siegel”, że prawdopodobnie masz na myśli mtime, po prostu użyłbym wbudowanej funkcji exiftools.

lubić:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

spowoduje to pobranie informacji „DateFime” DateTimeOriginal z pola „exif” i użycie jej do ustawienia informacji o dacie / godzinie zmodyfikowanych przez system plików pliku „test.jpg”.

Przykład:

$ 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

Można to również zrobić za pomocą jheadpolecenia:

$ jhead -ft file.jpg

W przypadku Jhead 3.0 jest to opcja -dsft. -ftrobi coś przeciwnego.
Tesquin Crydd

jhead wydaje się być jedynym narzędziem EXIF, które nie psuje się z nagłówkiem EXIF ​​- exiftool i exiv2 faktycznie zwiększają rozmiar pliku i przesuwają nagłówki, co jest dla mnie całkowicie nie do przyjęcia.
Michael

3

ExifTool może odczytywać i przetwarzać większość informacji EXIF, w tym wyodrębniać oryginał / datę lub tworzyć dane EXIF. Możesz użyć tych informacji, aby zmienić nazwę plików lub zmienić ich sygnatury czasowe. Na przykład:

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

Znajduje to wszystkie pliki JPG w bieżącym katalogu i aktualizuje znaczniki czasu.

Jeśli chcesz również nadać tym plikom nazwę na podstawie tej daty (to może się przydać), dodaj także mv -i $PIC $(dirname $PIC)/$DATE.jpgprzed donewierszem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.