exiftool - Консольная утилита для переименования фотографий | Wiki | PWODEV
, 29.04.2020 01:59

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 сервере.


Один комментарий на «“exiftool — Консольная утилита для переименования фотографий”»

Добавить комментарий