Змінити дату створення файлу з метаданих JPEG EXIF


29

Під час завантаження на ftp-сайт початкова дата створення файлу здається втраченою, і я отримую замість дату завантаження. Однак дані Exif у файлі є правильними. Чи є інструмент для пакетної зміни створеної дати з дати Exif?


1
Будь ласка, подумайте про прийняття відповіді, яка вам вважається найбільш корисною. Таким чином, інші люди, які шукають це питання, побачать його як "відповідь". Це також спосіб нагородити людину, яка витратила свій час на допомогу тобі.
Дмитро Григор’єв

Відповіді:


27

Інструмент обробки EXIF exiv2має вбудований варіант для цього:

exiv2 -T rename image.jpg

встановлює час останньої модифікації файлу mtimeна дату, збережену у метаданих EXIF.

Ви попросили використовувати час створення - але це не використовується в системах, схожих на Unix - і для цього є вагомі причини: /unix/27297/why-doesnt-nix-keep-track -of-file-create-time

Я впевнений, що час, який ви називаєте, створює час насправді mtime- проблем там немає.


Від 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.


Дивіться варіант -tзробити протилежне.


Я б інтерпретував "навпаки", щоб означати встановлення часової позначки EXIF ​​з часової мітки файлу, але це не те, що -tробить. Насправді, здається, це насправді є сукупністю того, що -Tробить.
Майкл

7

Якщо ви встановите exiftool з CPAN, ви можете запустити наступний сценарій, припускаючи, що всі ваші файли знаходяться в каталозі під назвою "всі"

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

чи можете ви описати, що робить цей сценарій? Зокрема, аргументи дляexiftool
user5359531

5

Припускаючи, як згадував "Volker Siegel", що ви, мабуть, маєте на увазі mtime, я б просто використав функцію exiftools вбудований.

подібно до:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

це займе інформацію "поле exif" DateTimeOriginal "та використає її для встановлення зміненої файловою системою інформації про дату / час файлу" test.jpg ".

Приклад:

$ 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

Це також можна зробити за допомогою jheadкоманди:

$ jhead -ft file.jpg

Для Jhead 3.0 ця опція є -dsft. -ftробить навпаки.
Тесквін Крідд

jhead, здається, є єдиним інструментом EXIF, який не в'яжеться з заголовком EXIF ​​- exiftool і exiv2 насправді збільшують розмір файлу і переміщують заголовки, що для мене абсолютно неприйнятно.
Майкл

3

ExifTool може читати та маніпулювати більшістю інформації EXIF, включаючи вилучення оригіналу тегів Дата / Час або Створення даних EXIF. Ви можете використовувати цю інформацію для перейменування файлів або зміни їх часових позначок. Наприклад:

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

Це знайде всі файли JPG у поточному каталозі та оновить часові позначки.

Якщо ви також хочете надати цим файлам ім’я на основі цієї дати (це, як правило, стане в нагоді), тоді також додайте mv -i $PIC $(dirname $PIC)/$DATE.jpgперед doneрядком.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.