Как пакетно переименовать файлы 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/
Чтобы полностью объяснить команду, вот как она работает.
exiftool
запускает скрипт-fileOrder DateTimeOriginal
заставляет exiftool обрабатывать изображения в том же порядке, в котором они были сняты. Это важно для сохранения нумерации изображений в течение дня в исходном хронологическом порядке.-recurse
рекурсивно обрабатывает подкаталоги, что полезно, если вы используете Shotwell для импорта, поскольку фотографии размещаются в каталогах, упорядоченных по дате.-extension jpg -extension jpeg
убедитесь, что обрабатываются только файлы JPEG. (Обратите внимание, что они не зависят от конкретного случая и jpg=JPG, поэтому мы ловим все)-ignoreMinorErrors
Игнорируйте любые ошибки, которые не влияют на желаемый результат (обычно это проблемы с чтением несвязанных тегов, которые не нужны для этой операции).'-FileName<CreateDate'
Помещает дату создания фотографии в имя файла.-d %Y-%m-%d%%-.3nc.%%e
Вот-d
устанавливает желаемый выходной формат даты. Мы будем использовать дефис, состоящий из четырех цифр, а затем двухзначный месяц и день (%Y-%m-%d
) с последующим трехзначным номером, начинающимся с 001 (%%-.3nc
), сохраняя исходное расширение файла (.%%e
).~/Pictures/
это последний элемент, это просто каталог, которыйexiftool
должен обработать с командой.
Примечание об ошибках -ignoreMinorErrors
помогает, но все равно вы можете увидеть сообщение "Предупреждение: Неверный каталог PreviewIFD", которое можно игнорировать, или "Предупреждение: нет доступных для записи тегов из /path/to/problem/image.jpg". Второе, которое я не смог разрешить, но я видел его только для нескольких изображений, поэтому я вручную переименовал их в Nautilus в качестве обходного пути.
Эту команду еще можно улучшить, но она протестирована и работает с большой (40 ГБ, 13000 изображений) библиотекой фотографий, она быстрая и не выдает ошибок, только не может переименовать случайное изображение, в котором отсутствует тег, который создаст большинство современных камер,