Существует набор фотографий с временными метками в названиях файлов, например:
Photo on 3-09-12 at 9.24 PM #2.jpg
Photo on 3-09-12 at 9.24 PM #1.jpg
Photo on 3-09-12 at 8.23 PM.jpg
и т. д.
(«3-09-12» означает «3 сентября 2012 г.» или ДД-ММ-ГГ)
Но у этих фотографий вообще нет данных EXIF. Перед тем, как импортировать их в большую коллекцию, как бы вы передали эту информацию exiftool
и также сказали бы ей добавить новые временные метки в виде данных EXIF, все из имен файлов фотографий?
Обновлять: (Теперь часть 1) мой вопрос о разборе имен файлов с ДД-ММ-ГГ и 12-часовым временем был очень любезно дан ответом @Stephane. Но я обнаружил, что та же партия фотографий содержит имена файлов с одной вариацией, которую я пропустил. Надеюсь, будет разумнее добавить 'часть 2' вместо того, чтобы начинать совершенно новый вопрос.
Суммируя:
Как я могу изменить блестящий ответ @Stephane --
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*?at.*?[AP]M)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*[PA]M*.jpg
-- чтобы он мог работать с форматом имени файла ниже, который немного отличается от первой части вопроса тем, что использует ГГГГ-ММ-ДД и 24-часовое время:
Photo on 2010-09-15 at 18.44 #4.jpg
Photo on 2010-09-15 at 18.44 #3.jpg
Photo on 2010-09-15 at 18.44.jpg
Дополнительные пояснения:
Попытка отредактировать Date::Manip
часть сценария Стефана, похоже, демонстрирует мое невежество в отношении того, что происходит в самых важных его частях.
Я попытался опустить Date_Init
строку, поскольку мы вернулись к формату даты в стиле ISO, содержащему полный год, а затем
/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg
Но exiftool
дает мне no writeable tags
и FileName not defined
. Инструкции наhttp://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.podне кажутся полезными (по крайней мере, мне) для понимания того, что происходит с этими точками, этой «y» в начале строки, точкой с запятой и т. д., и их довольно трудно найти в Google :S
решение1
Пытаться:
exiftool '-CreateDate<${FileName;use Date::Manip;
Date_Init("DateFormat=non-US");
/on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
}' ./*on\ *at*.jpg
(возможно, вам придется установить Date::Manip
perl
модуль).
Устанавливает -Tag<value
соответствующий тег. Может ${tag;perl-code}
использоваться для расширения до значения tag
после его обработки perl-code
.
Здесь план состоит в том, чтобы использовать Date::Manip
функцию UnixDate
для анализа даты в имени файла и преобразования ее в формат, приемлемый для CreateDate
тега ( 2011-04-15 21:38:00
).
Date::Manip
понимает много распространенных форматов дат. Например, он понимает 3-09-12 at 9:24 PM
(хотя вам нужно указать, является ли это американской или неамериканской конвенцией, где первым идет день или месяц) и 2010-09-15 at 18.44
(обратите внимание :
на вместо .
).
Итак, мы извлекаем эту часть из имени файла, преобразуем в .
и :
передаем ее в UnixDate
.