Під час завантаження на ftp-сайт початкова дата створення файлу здається втраченою, і я отримую замість дату завантаження. Однак дані Exif у файлі є правильними. Чи є інструмент для пакетної зміни створеної дати з дати Exif?
Під час завантаження на ftp-сайт початкова дата створення файлу здається втраченою, і я отримую замість дату завантаження. Однак дані Exif у файлі є правильними. Чи є інструмент для пакетної зміни створеної дати з дати Exif?
Відповіді:
Інструмент обробки 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
зробити протилежне.
-t
робить. Насправді, здається, це насправді є сукупністю того, що -T
робить.
Якщо ви встановите 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
Припускаючи, як згадував "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
Це також можна зробити за допомогою jhead
команди:
$ jhead -ft file.jpg
-dsft
. -ft
робить навпаки.
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
рядком.