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

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

  • Найти количество дубликатов дескрипторов файлов в Linux
  • Как сравнить размеры файлов в двух каталогах?
  • Функционал posix_fadvice / POSIX_FADV_DONTNEED в Linux?
  • Способы определения, какие (конфигурационные) файлы считываются исполняемым при запуске
  • Одно и то же имя в другом каталоге одинаково?
  • Как удалить этот неуправляемый каталог?
  • Зная, изменен ли каталог
  • Список всех файлов, заканчивающихся несколькими расширениями файлов?
  • 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!' {} \; 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.