У меня есть каталог, который содержит пронумерованные файлы изображений, что-то вроде этого:
01.png
02.png
03.png
03.svg
04.png
05.png
06.jpg
07.png
08.png
09.png
09.svg
10.png
Иногда может быть несколько версий файла в различных форматах (например. png
И svg
версии 03
и 09
файлы выше) , но эти цифры иначе подряд. Обычно в каждом каталоге содержится 40-80 таких файлов. Числа соответствуют порядку, в котором эти изображения появляются в рукописи (документ Word, но это не важно). Нет другого способа определить порядок изображений.
Если я добавлю новое изображение в рукопись, мне нужно будет поместить копию изображения в этот каталог с правильной нумерацией. Поэтому, если новое изображение является пятым в рукописи, мне нужно переименовать файлы в каталоге, чтобы освободить место для него:
01.png
02.png
03.png
03.svg
04.png
06.png
07.jpg
08.png
09.png
10.png
10.svg
11.png
Какой самый простой способ из командной строки или из скрипта или макроса перенумеровать все файлы, начиная с определенного числа? У меня стандартная установка Fedora Linux с использованием bash.
Это будет проще в zsh, где вы можете использовать
On
Глоб классификатор для сортировки матчей в порядке убывания (иn
использовать числовой порядок, в случае , если имена файлов не все имеют ведущие нули к одной и той же ширине);(l:WIDTH::FILLER:)
флаг расширения параметр , чтобы дополнить все числа в одной и той же ширины (ширина большего числа).В bash вот скрипт, который предполагает, что файлы дополняются до фиксированной ширины (в противном случае скрипт не будет переименовывать нужные файлы) и дополняется до фиксированной ширины (которая должна быть указана).
источник
Точная проблема рассматривается в этой статье . Обратите внимание, что вам придется изменить его для поддержки форматов SVG и PNG, добавив второй шаг MV.
источник
Полегче:
Ты получишь:
источник
Похоже, в последнее время интерес к этому вопросу невелик, но, если кто-то наткнется на него, здесь есть три вопроса. Один из них заключается в том, как выбрать файлы для переименования на основе семантических критериев (диапазон не является лексическим и не может быть указан с помощью подстановочных знаков или даже регулярных выражений - теория автоматов говорит, что это более сложно, чем NFA). Второй - как изменить имя, изменив его часть. Третий - как избежать конфликта имен. Сценарий на Bash и во многих других языках может выполнять это конкретное преобразование, но большинству из нас не нужно писать программу каждый раз, когда мы хотим переименовать группу файлов. С моим (бесплатным и открытым исходным кодом) rene.py вы можете делать то, что вы хотите, но для избежания проблемы конфликта имен требуется два вызова. Первый
rene ?.*/#7-80 %?.* B
увеличивает все имена в диапазоне, добавляя префикс%, чтобы избежать существующих имен. Затемrene %* *
удаляет этот префикс из тех файлов, которые его имеют. Я описываю это по адресу https://sourceforge.net/p/rene-file-renamer/discussion/examples/thread/f0fe8aa63c/источник