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

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

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

  • Защита данных от битовой гнили
  • Разделить содержимое файла в Linux
  • Разрешения группы неэффективны, разрешение все еще запрещено
  • Удалять файлы в каталоге, которые также находятся в другом каталоге
  • Храните файл для всех пользователей в группе.
  • Выход команды LS в файл
  • Мне нужно заменить все - на _ , удалить все числа и затем добавить нумерацию, которая сбрасывается в каждом каталоге. Таким 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, но он удаляет мои файлы. Поэтому, если кто-то может указать мне в правильном направлении, я бы очень признателен!

  • Использование сценария оболочки для извлечения данных на основе пользовательского ввода
  • Правила SELinux применяются до или после стандартных разрешений linux?
  • Как называется каталог верхнего уровня
  • Как создать зашифрованный контейнер (динамически расширяемый) на OpenBSD
  • Поиск отсутствующего значения в текстовом файле
  • Как мне перебирать только каталоги в bash?
  • 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 - лучшая ОС в мире.