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

Я надеялся, что кто-то с лучшими навыками 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, но он удаляет мои файлы. Поэтому, если кто-то может указать мне в правильном направлении, я бы очень признателен!

  • Как мне перебирать только каталоги в bash?
  • Почему «du -b» показывает другой размер, чем «правый щелчок» ⇨ «свойства» внутри файловых браузеров?
  • Храните файл для всех пользователей в группе.
  • Что случилось с файлом, когда я ввел «mv file.txt ../»?
  • Как узнать, сколько строк содержит текстовый файл, не просматривая его?
  • длительная задержка в (win) rar перед добавлением файлов
  • Сохранять размер файла журнала без логротата
  • Категории разрешений для файлов
  • 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!' {} \; 
    Linux и Unix - лучшая ОС в мире.