exiftool — Консольная утилита для переименования фотографий
Сегодня рассмотрим как массово переименовывать файлы с помощью exiftool. Эта cli утилита считывает все метаданные фото или видео в том числе и exif данные.
Задача была переименовать все фото и видео файлы где бы они не находились в определенной структуре в определенной папке.
Итак как установить exiftool на mac os с помощью командной строки?
brew install exiftool
Теперь заходим в папку где лежат все наши фото и видео которые надо переименовать.
Примеры команд:
Вывести всю информацию о файле img.jpg
exiftool img.jpg
В виде атрибутов и значений
exiftool -s img.jpg
В виде только значений
exiftool -s -S img.jpg
Теперь добавляем любой атрибут из списка из прошлой команды:
Выведем дату создания файла из exif атрибута:
exiftool -s -DateTimeOriginal img.jpg
Или выведем дату создания файла:
exiftool -s -CreateDate img.jpg
Выведем имя файла и обе даты:
exiftool -s -FileName -CreateDate -DateTimeOriginal img.jpg
По умолчанию мы увидим атрибут только в том случае если он заполнен, если надо показать содержимое в любом случае дописываем в команду -f это выведет все данные даже если какой-то атрибут пустой.
exiftool -s -f -FileName -CreateDate -DateTimeOriginal img.jpg
Теперь про директории…
Выведем имя, и обе даты создания для всех файлов в текущей дитектории:
exiftool -s -f -FileName -CreateDate -DateTimeOriginal .
или в определенной директории:
exiftool -s -f -FileName -CreateDate -DateTimeOriginal /path/to/you/directory
Если нужно сканировать еще и подпапки добавляем -r рекурсивно.
exiftool -s -f -r -FileName -CreateDate -DateTimeOriginal .
А теперь давайте изменим формат даты. Для этого добавляем -d и далее формат
exiftool -s -f -r -FileName -CreateDate -DateTimeOriginal -d '%Y.%m.%d_%d.%m.%S' .
Если мы хотим вывести информацию в произвольном формате, можно использовать -p ‘какой-то текст из файла $FileName’ где в название переменной это атрибуты
exiftool -s -f -r -p '$FileName = $CreateDate or $DateTimeOriginal' .
Условия if else?
Да, тут есть и условия -if ‘какое-то условие’ тогда обработка этого файла выполняется, в противном случае не выполняется.
Какие свойства имеются:
not — отрицание например ‘not $CreateDate’
or — или
and — и
eq — equivalent что-то типа =
exiftool -s -f -r -p '$FileName не имеет CreateDate' -if '(not $CreateDate and $FileName eq "SDC17387.xmp")' .
Если хочется перенести все файлы из всех подпапок в текущую папку, делаем так:
exiftool -r '-Directory=.' .
или так
exiftool -r '-FileName<./${FileName}' .
А если файлы повторяются оно их заменит или что?
Сделаем если будут файлы повторяться чтобы добавлялось число перед расширением.
%f это название файла без расширения
%-3c это добавляет -001 если с таким же именем уже есть. 3 означает сколько символов. По сути можно написать только %c
%e это расширение
Заметка: это не переносит файл а копирует его.
exiftool -r -w '%f%-3c.%e' .
В подпапку
exiftool -r '-Directory=./subfolder' .
или так:
exiftool -r '-FileName<./subfolder/${FileName}' .
Если хотим отсортировать по полной дате:
exiftool -r '-FileName<./${DateTimeOriginal}/${FileName}' .
Теперь сортируем по папкам с датой
Если хотим отсортировать по папкам по годам, месяцам и тд, то добавляем вывод даты в формате который хотим.
exiftool -r '-Directory<./${DateTimeOriginal}' -d '%Y/%m/%Y.%m.%d' .
или так:
exiftool -r '-FileName<./${DateTimeOriginal}/${FileName}' -d '%Y/%m/%Y.%m.%d' .
Можно и само название файла поменять под дату, но надо не забыть добавить в конце формат файла %e
exiftool -r '-FileName<./${DateTimeOriginal}.%e' -d '%Y/%m/%Y.%m.%d/%Y.%m.%d_%d.%m.%S' .
Но что будет с файлами где $DateTimeOriginal пустое — ничего. Покажет ошибку для них. В таком случае лучше всего добавить проверку на существование.
exiftool -r '-FileName<./${DateTimeOriginal}.%e' -d '%Y/%m/%Y.%m.%d/%Y.%m.%d_%d.%m.%S' -if '($DateTimeOriginal)' .
А вот с проверкой но с оригинальным названием файла:
exiftool -r '-Directory<./${DateTimeOriginal}' -d '%Y/%m/%Y.%m.%d' -if '($DateTimeOriginal)' .
или так:
exiftool -r '-FileName<./${DateTimeOriginal}/${FileName}' -d '%Y/%m/%Y.%m.%d' -if '($DateTimeOriginal)' .
Все эти команды переносят файлы, а как же скопировать файл а не переносить? добавляем -o .
exiftool -o . -r '-Directory<./${DateTimeOriginal}' -d '%Y/%m/%Y.%m.%d' -if '($DateTimeOriginal)' .
Добавляем так же числовой номер если такой файл в папке существует:
%f это название файла без расширения
%-3c это добавляет -001 если с таким же именем уже есть
%e это расширение
exiftool -r '-FileName<./${DateTimeOriginal}/%f%-3c.%e' -d '%Y/%m/%Y.%m.%d' -if '($DateTimeOriginal)' .
Итог:
Итак что мы узнали? Как работать с файлами, как читать мета данные, как переименовывать файлы, перемещать и многое другое.
Параметры что мы узнали:
-s короткое названия атрибутов
-s -S без названия атрибутов только значение атрибута
-f показать значение даже если его нет
-r рекурсивно, считывать и файлы из подпапок тоже
-d задать формат даты в которой выводить
-p вывод информации в произвольной форме
-if условие при котором выполнять манипуляции с файлом
Ух, статья получилась слишком длинная, но зато много полезного и нового.
В следующей статье я покажу пример уже готовых команд как организовать фото и видео файлы по годам, месяцам и дням для медиатеки на Mac OS или NAS сервере.
Читайте также:
- Как отформатировать флешку на маке, если она не читается
- Изменить время жизни сессии для админа в мадженте
- Cli команды для Magento2
- Условия if else в командной строке bash
- Cli string replace
Один комментарий на «“exiftool — Консольная утилита для переименования фотографий”»
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
[…] […]