Я использую следующую команду для массового переименования изображений внутри скрипта bash, чтобы каждое изображение именовалось в соответствии с датой, когда был сделан снимок:
exiftool -r -f '-filename<${CreateDate}_${model;tr/ /_/}_%f.jpg' -d %Y%m%d_T%H%M%S%%-c -ext jpg $targetDir
Иногда, чаще, чем мне хотелось бы, я сталкиваюсь с изображениями, которые имеют неверные значения для дат в метаданных. Например:
$ exiftool -*date -G -s *.jpg
[File] FileModifyDate : 2014:12:22 18:32:03-07:00
[File] FileAccessDate : 2014:12:23 11:41:23-07:00
[File] FileInodeChangeDate : 2014:12:23 11:40:00-07:00
[EXIF] CreateDate : 2014/12/23 00:52:41
В этом примере FileModifyDate - это дата, которую я ожидал увидеть в теге CreateDate, то есть, что снимок был сделан 2014: 12: 22 18: 32: 03-07: 00.
Но поскольку CreateDate неверен, новое имя файла неверно. Что ж, с точки зрения команды, используемой для переименования файла, это правильно (мусор в -> мусор вне), но я бы хотел, чтобы дата, использованная в имени файла, была датой / временем, когда был фактически сделан снимок.
В этом примере есть ли способ запросить в файле все теги даты, а затем выбрать самую раннюю доступную дату в качестве даты, которую следует использовать в переименованном имени файла?
Кроме того, используя '$ {model; tr / / _ /}', я могу заменить любые пробелы, которые могут быть в теге модели, подчеркиванием. Это хорошо, но я бы предпочел обернуть это выражение вокруг всего нового имени файла. Таким образом, поскольку я использую «% f.jpg», если исходное имя файла содержит пробелы, результирующее имя файла не будет содержать пробелов. Это возможно с exiftool?