Как мне обновить exif DateTimeOriginal на основе имени файла? - PullRequest
0 голосов
/ 30 января 2019

Я хочу поделиться 10K фотографиями с помощью Google Фото.Эти изображения были отсканированы, поэтому у них нет правильного DateTimeOriginal для хронологического упорядочения.

Мне нужно обновить DateTimeOriginal до YYYY: 01: 01 00:00:00, чтобы я мог организовать их в Google Фото для совместного использования.и иметь некоторое чувство порядка.Насколько я понимаю, Google использует exif DateTimeOriginal для сортировки.

Соглашения о присвоении имен моим фотографиям:

1967 Свадьба Смита и Джи - 3.jpg

1962 Воссоединение семьи Смитов - 87.jpeg

1990 Смит, 50-еAnniversary - 16.jpeg

Я пробовал это:

exiftool "-datetimeoriginal < ${filename;$_=substr($_,0,3)} 01:01 12:00:00" DIR

, но получаю BASH "ошибка неправильной замены"

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вы близки к своему оригиналу, но, как сказал @Grinnz, вам нужно использовать одинарные кавычки.Кроме того, вам нужны первые 4 числа за год, но вы набираете только 3.

Так что попробуйте:
exiftool '-DateTimeOriginal<${filename;$_=substr($_,0,4)} 01:01 12:00:00' FileOrDir

Время запуска exiftool - его самая высокая производительностьнажмите, так что вы обнаружите, что это намного быстрее, чем зацикливание на каждом файле (см. exiftool Common Error # 3 ).

Эта команда создает файлы резервных копий.Добавьте -overwrite_original для подавления создания файлов резервных копий.Добавьте -r, чтобы перейти в подкаталоги.

0 голосов
/ 30 января 2019

Возможно, есть лучший способ, но он работает:

#!/bin/bash
for f in *.jpg; do
   year=$(grep -Eo "^\d+" <<< "$f")
   echo File: $f, setting year:$year
   exiftool "-datetimeoriginal=${year}01:01 12:00:00" "$f"
done

Отладочный вывод

File: 2013 Family Reunion.jpg, setting year:2013
    1 image files updated
File: 2017 Some wedding.jpg, setting year:2017
    1 image files updated

Попробуйте на COPY из ваших файлов во временном каталоге!

...