увеличить дубликат имени файла exiftool

avatar
spesmagna
8 апреля 2018 в 11:34
1418
1
1

У меня есть следующий сценарий, который отлично работает, за исключением того, что он не может обрабатывать повторяющиеся имена файлов. Как я могу просто изменить его, чтобы при обнаружении изображения с таким же именем он просто добавлял приращение в конце имени файла, например. если файл IMG_20170404_170509.JPG найден дважды, второй экземпляр будет переименован в IMG_20170404_170509_1.JPG, а если будет найден другой, то он будет IMG_20170404_170509_2.JPG и т. д.

Вот мой текущий скрипт:

exiftool -o . '-Directory<$createdate/${model;}' -d /volume1/Synology/Pictures/Pictures/post_2016/%Y/%m/ -r /volume1/photo/"input"/

Спасибо

П.С. Я знаю, что между -Directory и $Createdate в приведенном выше скрипте есть <, но если я включу его, мое сообщение на этой доске будет обрезано (да, я знаю, что я настоящий новичок во всем этом. Извиняюсь).

Источник
StarGeek
8 апреля 2018 в 16:13
0

Я предполагаю, что перед «вводом» в вашей команде есть знак доллара? /volume1/photo/"$input"/

Ответы (1)

avatar
StarGeek
8 апреля 2018 в 16:13
1

Поскольку вы хотите изменить имя файла, а также каталог, вам придется использовать псевдотег Filename вместо псевдотега Directory.

Попробуйте эту команду:
exiftool -o . '-Filename<$createdate/${model;}/%f%+c%E' -d /volume1/Synology/Pictures/Pictures/post_2016/%Y/%m -r /volume1/photo/"$input"/

Вы можете включать пути к каталогам при переименовании файла (см. 3-й абзац Теги FileName и Directory). %f содержит имя файла. Переменная %c — это счетчик, который добавляется в случае конфликта имен файлов. Добавление к нему знака «плюс» поместит подчеркивание перед номером счетчика (см. документацию по параметру -w). %E добавляет расширение, включая начальную точку (строчная буква e не будет включать начальную точку).

spesmagna
9 апреля 2018 в 08:33
0

Большое спасибо. Я попробую это и вернусь с отзывом.

StarGeek
9 апреля 2018 в 14:54
0

Дополнительная информация: вы можете использовать псевдотег Testname вместо Filename, чтобы проверить результаты переименования без фактической обработки файлов.

spesmagna
13 апреля 2018 в 20:25
0

Привет СтарГик. Я попробовал ваш код, и он отлично работает. Большое спасибо!

spesmagna
14 апреля 2018 в 13:12
0

У меня вопрос вдогонку. Мне нужно отсортировать файлы дважды: один раз по приведенному выше скрипту, а второй раз в отдельном дереве каталогов (для последующего шифрования и загрузки в облачное хранилище). Это «последний» файл, который мне нужно отсортировать во втором дереве каталогов, а не исходный (чаще всего они совпадают, за исключением точного случая, когда был дубликат файла, а скопированный файл был переименован - это то, что переименованный файл, который я хочу переместить в новое дерево каталогов). Любые предложения о том, как я могу это сделать? Спасибо

StarGeek
14 апреля 2018 в 15:32
0

Копировать в Directory2 только в случае конфликта имен файлов в Directory1? Нет, я не могу придумать способ только с exiftool. Я бы подумал, что для этого потребуется больше сценария. Я предполагаю, что файлы в Directory2 удаляются после шифрования/загрузки? Если это так, я бы подумал примерно так: 1) Возьмите текущую временную метку 2) запустите указанную выше команду exiftool, 3) получите имена любых файлов, в которых есть шаблон копирования числа, шаблон UnderscoreNumberDotJpg, а также новее, чем временная метка, сохраненная в начале скрипта. 4) Скопируйте эти файлы в Directory2.

spesmagna
14 апреля 2018 в 16:07
0

Спасибо СтарГик. Я думал о чем-то подобном: скопируйте в каталог 2 любой файл в каталоге 1 и его подкаталогах, у которого FileAccessDate <30 минут (например). Таким образом, любой вновь добавленный файл копируется в каталог 2 для последующего шифрования и загрузки. Но я нигде не могу найти точную команду для идентификации файлов на основе их «возраста» FileAccessDate. Есть идеи? Спасибо

StarGeek
15 апреля 2018 в 15:49
0

Извините за задержку с ответом. Я знал, что это возможно с помощью exiftool, но не мог вспомнить, как это сделать. Вы также можете посмотреть версию копии bash, так как она, вероятно, будет быстрее. Вот пример, но с перемещением (mv) вместо копирования (cp). В exiftool вы можете попробовать что-то вроде этого: exiftool -if '${FileAccessDate;DateFmt("%s")>${now;DateFmt("%s")-1800}" -o . '-Directory=/path/to/Directory2' Сначала протестируйте его. число 1800 — это количество секунд в 30 минутах (30*60). Меняйте по мере необходимости.