При загрузке на FTP-сайт первоначальная дата создания файла, похоже, теряется, и вместо этого я получаю дату загрузки. Однако данные Exif в файле верны. Есть ли инструмент для пакетного изменения даты создания с даты Exif?
При загрузке на FTP-сайт первоначальная дата создания файла, похоже, теряется, и вместо этого я получаю дату загрузки. Однако данные Exif в файле верны. Есть ли инструмент для пакетного изменения даты создания с даты Exif?
Ответы:
Инструмент обработки EXIF exiv2
имеет встроенную опцию для этого:
exiv2 -T rename image.jpg
устанавливает время последней модификации файла, mtime
на дату, сохраненную в метаданных EXIF.
Вы просили использовать время создания, но оно не используется в Unix-подобных системах, и для этого есть веские причины: /unix/27297/why-doesnt-nix-keep-track -of-файлов создание времени
Я уверен, что время, которое вы называете временем создания, на самом деле 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, вы можете запустить следующий скрипт, предполагая, что все ваши файлы находятся в каталоге с именем «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
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 Create Data. Вы можете использовать эту информацию для переименования файлов или изменения их отметок времени. Например:
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
строкой.