Как пакетно переименовать файлы JPEG к дате изображения, добавив счетчик, который сбрасывается для каждого дня?

Я использую pyrenamer с моей коллекцией фотографий, и она прекрасно работает, за исключением одного вопроса. Я хочу, чтобы он переименовал фотографии по их метаданным по дате, с трехзначным номером в конце. Каждая папка в моей библиотеке представляет день, и я хочу, чтобы фотографии заканчивались цифрами от 001 до 999, начиная с 001 для каждой папки. Имя файла примера будет 2016-01-31-001.jpg.

Shotwell обрабатывает создание структуры каталогов при импорте с %Y/%m/%d структура в опциях, но когда я использую pyrenamer рекурсивно в каталоге ~/Pictures, я не вижу ожидаемого результата. Он переименовывается по дате, но продолжает увеличиваться в разных папках, вместо того, чтобы начинаться с 001 для каждой новой папки. Есть ли более простой способ сделать это?

Я знаю, что мог бы добавить больше переменных метаданных и переименовать в соответствии с часами, минутами и секундами, но это дает более длинные имена файлов, чем я хочу. Моя камера также может делать несколько снимков в секунду, так что это проблематично для переименования.

Какой самый простой способ сделать это, пожалуйста? Мне нравится использовать pyrenamer, но bash-скрипт тоже подойдет.

Токовый выход:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-003.jpg
│   └── YY-MM-DD-004.jpg
...

Желаемый вывод:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
...

1 ответ

Решение

Чтобы переименовать всю вашу библиотеку изображений JPEG-фотографий в формат YYYY-MM-DD-XXX.jpg, начиная с -001 каждый новый день, используйте эту команду с exiftool:

exiftool -fileOrder DateTimeOriginal -recurse -extension jpg -extension jpeg -ignoreMinorErrors '-FileName<CreateDate' -d %Y-%m-%d%%-.3nc.%%e ~/Pictures/

Чтобы полностью объяснить команду, вот как она работает.

  1. exiftool запускает скрипт
  2. -fileOrder DateTimeOriginal заставляет exiftool обрабатывать изображения в том же порядке, в котором они были сняты. Это важно для сохранения нумерации изображений в течение дня в исходном хронологическом порядке.
  3. -recurse рекурсивно обрабатывает подкаталоги, что полезно, если вы используете Shotwell для импорта, поскольку фотографии размещаются в каталогах, упорядоченных по дате.
  4. -extension jpg -extension jpeg убедитесь, что обрабатываются только файлы JPEG. (Обратите внимание, что они не зависят от конкретного случая и jpg=JPG, поэтому мы ловим все)
  5. -ignoreMinorErrors Игнорируйте любые ошибки, которые не влияют на желаемый результат (обычно это проблемы с чтением несвязанных тегов, которые не нужны для этой операции).
  6. '-FileName<CreateDate' Помещает дату создания фотографии в имя файла.
  7. -d %Y-%m-%d%%-.3nc.%%e Вот -d устанавливает желаемый выходной формат даты. Мы будем использовать дефис, состоящий из четырех цифр, а затем двухзначный месяц и день (%Y-%m-%d) с последующим трехзначным номером, начинающимся с 001 (%%-.3nc), сохраняя исходное расширение файла (.%%e).
  8. ~/Pictures/ это последний элемент, это просто каталог, который exiftool должен обработать с командой.

Примечание об ошибках -ignoreMinorErrors помогает, но все равно вы можете увидеть сообщение "Предупреждение: Неверный каталог PreviewIFD", которое можно игнорировать, или "Предупреждение: нет доступных для записи тегов из /path/to/problem/image.jpg". Второе, которое я не смог разрешить, но я видел его только для нескольких изображений, поэтому я вручную переименовал их в Nautilus в качестве обходного пути.

Эту команду еще можно улучшить, но она протестирована и работает с большой (40 ГБ, 13000 изображений) библиотекой фотографий, она быстрая и не выдает ошибок, только не может переименовать случайное изображение, в котором отсутствует тег, который создаст большинство современных камер,

Другие вопросы по тегам