Я использую приложение PhotScan Google для сканирования всех моих старых фотографий, которые сделаны перед возрастом цифровых фотоаппаратов, и я сохраняю эти фотографии с помощью даты фотографии (пример: 19821011_trip.jpg, yyyymmdd_trip.jpg).
Но этот метод сохраняет текущую дату взятия фотографии с помощью приложения в свойствах фотографии, поэтому что я пытался записать, сценарий, который возьмет информацию о дате от имени файла фотографии и исправит дату, которая хранится в свойствах файла фотографии.
Ожидание получить справку.
exiftool
к спасениюЯ предполагаю, что Вы хотите изменить данные EXIF своих отсканированных изображений согласно метке времени от имени файла изображения (не со времени, файл был создан как, например. ls -l
шоу).
К счастью, существует удобный инструмент для названного exiftool
. Если это еще не установлено, работать
sudo apt install libimage-exiftool-perl
сначала. exiftool
находится в стандартных репозиториях. Это может показать и управлять обоими именами файлов и данными EXIF. Например, возможно переместиться, файлы согласно EXIF приписывают CreateDate и файлы перемещения к подкаталогам как
2018
Jan
img0001.jpg
img0002.jpg
Feb
img0003.jpg
img0004.jpg
и так далее. Но это - другая история, и Вы хотите ее просто наоборот.
Давайте возьмем Ваш 19821011_trip.jpg
как пример и набор все три атрибута DateTimeOriginal, CreateDate и ModifyDate к Oct 11, 1982
. exiftool
имеет параметр для парсинга имени файла для чего-то, что похоже на дату и метку времени и затем назначает все эти даты сразу к тому значению. К сожалению, имя файла должно содержать метку времени (HHMMSS) для этого для работы, как так:
exiftool "-alldates<filename" 19821011_130000_trip.jpg
Это установило бы три атрибута даты, упомянутые выше на Oct 11, 1982, 01:00:00 PM
. Так как Ваше имя файла не содержит такую часть HHMMSS, мы должны изменить параметр немного:
exiftool '-alldates<${filename;$_=substr($_,0,8)} 13:00:00' 19821011_trip.jpg
Это выберет первые 8 символов от имени файла, добавит 13:00:00
и наконец синтаксический анализ та строка (19821011 13:00:00
) создавать надлежащую дату всех трех атрибутов. exiftool
довольно хорошо в парсинге меток времени, но требуется, по крайней мере, часть HHMM после даты.
Можно также работать exiftool
на целом каталоге:
exiftool '-alldates<${filename;$_=substr($_,0,8)} 13:00:00' .
Это затем обработает все изображения, которые это находит. Никакие заботы, это делает резервные копии всех измененных файлов.
me@ubuntu:~> exiftool -alldates 19821011_trip.jpg
(no output)
me@ubuntu:~> exiftool '-alldates<${filename;$_=substr($_,0,8)} 13:00:00' 19821011_trip.jpg
1 image files updated
me@ubuntu:~> exiftool -alldates 19821011_trip.jpg
Date/Time Original : 1982:10:11 13:00:00
Create Date : 1982:10:11 13:00:00
Modify Date : 1982:10:11 13:00:00
Вы могли сделать это с touch
и цикл как
for i in *.jpg; do
touch -d"${i%_trip.jpg}" "$i"
done
но это не очень точно, поскольку Ваши имена файлов только содержат дату без любой информации времени, время файла будет таким образом установлено на 0:00:00.000000000. Останьтесь со мной для лучшего пути.
Каждая обычная фотография имеет заголовок Exif, который содержит корректную метку времени того, когда фотография была сделана, если настройки даты и времени камеры были корректны. Я всегда предпочитаю использовать это, это отказоустойчиво и легко с jhead
от пакета jhead
, посмотрите man jhead
для деталей. Некоторые полезные опции:
-ft Sets the file's system time stamp to what is stored in the Exif header.
-n[format_string]
This option causes files to be renamed and/ or mmoved using the date information from the Exif header "DateTimeOriginal" field. If the file is not an Exif file, or the DateTimeOriginal
does not contain a valid value, the file date is used. If the new name contains a '/', this will be interpreted as a new path, and the file will be moved accordingly.
Команда для переименования всех jpg
файлы в текущем каталоге согласно их метке времени заголовка Exif и изменению штампа системного времени файла могли быть:
jhead -ft -n'%Y%m%d_trip' *.jpg
jhead
достаточно мудро для не перезаписи файлов, если имя файла уже существует:
Если целевое имя уже будет существовать, то имя будет добавлено с "a", "b", "c", и т.д., если имя не закончится буквой, в этом случае это будет добавлено с "0", "1", "2", и т.д.
Если Ваши файлы не имеют заголовка Exif, следующие опции могут помочь:
-mkexif
Creates minimal exif header. Exif header contains date/time, and empty thumbnail fields only. Date/time set to file time by default. Use with -rgt option if you want the exif header to
contain a thumbnail. Note that exif header creation is very limited at this time, and no other fields can be added to the exif header this way.
-dsft Sets the Exif timestamp to the file's timestamp. Requires an Exif header to pre-exist. Use -mkexif option to create one if needed.