Переименовать файлы для изменения знаков пунктуации и нумерации

Я надеялся, что кто-то с лучшими навыками regex может помочь мне с некоторыми файлами, которые мне нужно переименовать. Мне нужна команда для рекурсивного переименования большого количества jpg-файлов в Ubuntu.

Однако есть некоторые проблемы. Обычная группа файлов будет выглядеть как ani-estate-villas_1431640729_3.jpg , ani-estate-villa_3627544278_7.jpg и ani-estate-villa_3143254376_5.jpg

Мне нужно заменить все - на _ , удалить все числа и затем добавить нумерацию, которая сбрасывается в каждом каталоге. Таким ani_estate_villas_2.jpg , ani_estate_villas_3.jpg и та же группа файлов должна выглядеть как ani_estate_villas_1.jpg , ani_estate_villas_2.jpg , ani_estate_villas_3.jpg и то же самое с другими файлами в других каталогах.

Глубина рекурсии – это 1 или 2 каталога глубоко, поэтому вы можете найти directory/file.jpg или directory/directory/file.jpg это довольно много случайных.

Выполнение команды в каждом каталоге с jpgs также выполнимо, поэтому, если кто-нибудь имеет представление о том, как переименовать все файлы с этими характеристиками, будет хорошо. Несмотря на то, что одна команда более холодная, я бы очень признателен за несколько более повторяющееся решение, потому что вручную изменить 400+ jpg-файлов слишком много.

Я пробовал много вещей, но я даже не близок, даже не стоит его здесь. Я попытался использовать krename, но он удаляет мои файлы. Поэтому, если кто-то может указать мне в правильном направлении, я бы очень признателен!

One Solution collect form web for “Переименовать файлы для изменения знаков пунктуации и нумерации”

Вы можете использовать команду prename для переименования файлов на основе преобразования, написанного на Perl .

Давайте начнем просто. Чтобы переименовать все файлы .jpg в каталоге, изменив все - на _ , мы можем просто использовать оператор s (мы также можем использовать tr ). Код Perl выполняется для преобразования каждого имени файла.

 prename 's!-!_!g' *.jpg 

Чтобы изменить последовательность чисел в конце на простой счетчик, введем переменную счетчика. Я использую глобальную переменную $a как счетчик (введение дополнительных переменных сложнее). Регулярное выражение (\.[^/.]*)$ Соответствует расширению файла, а $1 в заменяющем тексте означает соответствие группы в скобках.

 prename 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' *.jpg 

Обратите внимание, что файлы переименовываются в порядке, заданном аргументами имени файла, то есть порядок расширения *.jpg определяет нумерацию файлов.

Кроме того, мы можем инициализировать счетчик явно с помощью блока BEGIN .

 prename 'BEGIN {$a = 1;} s!-!_!g; s!_[0-9_]+(\.[^/.]*)$!_$a$1!; ++$a;' *.jpg 

Чтобы выполнить это в каждом подкаталоге текущего каталога, вызовите find .

 find -type d -exec sh -c 'cd "$1" && prename "$0" *.jpg' 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' {} \; 
  • Сравните два файла для соответствия строк и сохраните положительные результаты
  • Как читать строки из переменной | удар
  • Доступ к файлам другого пользователя
  • Поиск файлов в каталоге с парными именами
  • Как удалить содержимое всех подкаталогов с именем «output»?
  • Присоедините два файла, каждый из которых содержит два столбца, которые имеют несколько столбцов.
  • Можно ли скопировать relpath в одну команду?
  • Как перенести завершенные торрент-файлы в другую папку, не нарушая ссылку на торрент?
  • Найти файлы рекурсивно, но выберите наиболее крупные из них с дублирующимися именами
  • Создайте каталог, используя имена файлов, и переместите файлы в соответствующую папку
  • Сценарий оболочки для прокрутки через папку и файлы списка
  • Предотвратите случайное удаление файла
  • Linux и Unix - лучшая ОС в мире.