Если я переименую изображения через exiv в exif date time, я делаю следующее:
find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;
Теперь может случиться, что фотографии имеют одинаковую метку времени (включая секунды). Как я могу сделать имя файла уникальным автоматически?
Команда должна быть стабильной в том смысле, что если я выполню ее снова в той же структуре каталогов (возможно, после добавления новых изображений), уже переименованные изображения не должны измениться, и если будут добавлены изображения с уже существующими именами файлов, новые имена файлов должны быть уникальными. также.
Моя первая попытка состояла в том, чтобы просто оставить исходное базовое имя в результирующем имени файла, но тогда команда не была бы стабильной в указанном выше смысле.
command-line
exif
ученик
источник
источник
mv
файл.exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .
. Может быть, вы могли бы превратить свой комментарий в ответ.Ответы:
Возможно, вы захотите попробовать
jhead
вместо этого то, что делает это «из коробки» (с суффиксамиa
,b
...,z
допускающими до 27 файлов с одинаковой датой) и не имеет проблемы стабильности, упомянутой @meuh:Или используя
exiftool
(пример на странице man):(здесь с
%-c
числовым суффиксом, начинающимся с-
)источник
Моя версия
exiv2
(0.25 001900) в интерактивном режиме спросит, что делать, если имя файла уже существует.Добавив опцию,
-F
он вместо этого автоматически добавит дополнительную_1
(или_2
т. Д.) К имени.Если команда запускается второй раз, она говорит:
и ничего не делает, но он запутывается, если есть
_1
часть, и переименует ее_2
. Он будет переключаться таким образом неразрушающим образом при каждом запуске. Вы можете игнорировать это, если хотите, или изменить свойfind
шаблон, чтобы игнорировать файлы, соответствующие шаблону даты с_
деталью.Например, начинается шаблон регулярного выражения для формата даты
[0-9]{4}_[0-9]{2}_...
. Чтобы упростить, я просто буду искать смесь из 20 символов из набора0..9
и_
, который является регулярным выражением[0-9_]{20}
. К этому следует добавить суффикс, за_
которым следует не менее 1 цифры_[0-9]{1,}.jpg
. Поскольку регулярное выражение должно соответствовать всему пути, а не только базовому имени, последнее регулярное выражение, включая каталог.*/[0-9_]{20}_[0-9]{1,}.jpg
.Таким образом, вы можете использовать поиск как:
источник
Exiv2 может справиться с этим самостоятельно. Я также потратил много времени в поисках помощи по этому вопросу, пока не пошел посмотреть руководство exiv2. Опция -F решает эту проблему.
Он добавит _N в конце, если файл уже существует.
И для тех, кто ищет вариант, позволяющий создать папку.
источник
Pyrenamer не будет работать на моем новом установленном Ubuntu 16.04, поэтому я должен найти другой способ решить эту проблему.
У меня есть файлы, такие как IMG_0001.JPG, IMG_0002.JPG, ... в одной папке. Проверьте этот сайт, /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash
Сначала установите exiv2, и я написал следующую командную строку:
для img в $ (ls *. [Jj] [Pp] [Gg] 2> / dev / null); do exiv2 -r '% Y% m% d_% H% M% S _' "$ (tmp = $ {img %%. *}; echo $ {tmp ## * _})" rename "$ img"; сделанный
Выходные имена файлов: YYYYMMDD_HHMMSS_0001.JPG, YYYYMMDD_HHMMSS_0002.JPG, ... и т. Д. Даже если фотографии были сделаны в одну секунду, оригинальный серийный номер фотографии будет иметь значение.
источник