(в других дистрибутивах она часто называется просто rename, prename или file-rename) — это один из самых мощных инструментов в Linux для массового переименования файлов.
Ниже подробно разобрано, почему она появилась (и почему так называется именно в Arch/Manjaro), а также какие у неё есть возможности.
---
1. Причина создания
Здесь нужно разделить причину создания самой утилиты и причину такого названия пакета в Arch Linux.
Почему создали саму утилиту?
Стандартная команда mv отлично справляется с переименованием одного файла, но если вам нужно переименовать 1000 фотографий (например, заменить пробелы на подчеркивания или поменять расширение), написание циклов в Bash (for file in *; do ...) становится утомительным и чреватым ошибками.
Утилита была создана (изначально Ларри Уоллом, создателем языка Perl), чтобы использовать мощь регулярных выражений Perl для пакетной обработки имен файлов. Она берет имя каждого файла, передает его в движок регулярных выражений Perl и сохраняет результат.
Почему в Arch/Manjaro пакет называется perl-rename?
Это сделано для предотвращения конфликта имен.
В базовом наборе утилит Linux (util-linux) уже есть простая программа rename (написанная на C), которая умеет делать только простую замену подстрок (например, rename .htm .html *.htm).
Чтобы продвинутая Perl-версия и базовая C-версия могли существовать в системе одновременно и не перезаписывать друг друга в /usr/bin/, в Arch Linux пакет и сам бинарный файл назвали perl-rename (иногда также доступен как prename).
---
2. Возможности perl-rename
Главная фишка утилиты — она принимает не просто аргументы, а код на языке Perl (обычно в формате оператора замены s/шаблон/замена/). Переменная $_ внутри этого кода содержит текущее имя файла.
Основные возможности:
1. Полноценные регулярные выражения Perl: Поддерживаются все "плюшки" Perl, включая группы захвата (), обратные ссылки \1, lookahead/lookbehind и модификаторы (/i для игнорирования регистра, /g для глобальной замены).
2. Выполнение произвольного Perl-кода: Вы можете использовать любые функции Perl для изменения имени файла (например, вызов stat() для получения даты создания файла и вставки её в имя).
3. Безопасный режим (Dry-run): Флаг -n (или --no-act). Показывает, что *будет* сделано, но не выполняет переименование. Критически важна для проверки сложных регулярных выражений.
4. Подробный вывод: Флаг -v (или --verbose) печатает каждое выполненное переименование.
5. Контроль перезаписи: По умолчанию утилита не перезапишет существующий файл. Флаг -f (или --force) принудительно перезаписывает цели.
---
3. Примеры использования
*Обратите внимание: в Arch/Manjaro команда вызывается как perl-rename.*
1. Замена расширения (например, .jpeg на .jpg)
perl-rename 's/\.jpeg$/.jpg/' *.jpeg
*(Здесь $ означает конец строки, чтобы случайно не заменить .jpeg в середине имени файла).*
2. Замена пробелов на подчеркивания
perl-rename 's/ /_/g' *
*(Флаг g означает "глобально", то есть заменить все пробелы в имени, а не только первый).*
3. Приведение всех имен к нижнему регистру
perl-rename '$_ = lc($_)' *
*(Здесь используется функция Perl lc() для перевода строки в нижний регистр).*
4. Добавление префикса ко всем файлам
perl-rename 's/^/backup_/' *
*(Символ ^ означает начало строки).*
5. Использование групп захвата (сложный пример)
Допустим, у вас есть файлы img_01.png, img_02.png. Вы хотите поменять местами слово и число, чтобы стало 01_img.png:
perl-rename 's/(img)_(\d+)/$2_$1/' *.png
6. Режим "сухого прогона" (ОБЯЗАТЕЛЬНО используйте перед сложными операциями)
Если вы не уверены в своем регулярном выражении, сначала добавьте -n:
perl-rename -n 's/старое/новое/' *
Утилита просто выведет в терминал список того, как файлы будут переименованы, но сами файлы тронуты не будут.
Резюме
perl-rename — это "швейцарский нож" для работы с именами файлов. Если вам нужно сделать с именами файлов что-то сложнее, чем просто "поменять букву А на Б", но вы не хотите писать скрипты на Bash или Python — perl-rename является идеальным и самым быстрым решением.
******
убирает метку Youtube
perl-rename -n 's/ ?\[[^\]]*\]//g' *.m4a *.mp3
-n — тестовый прогон, покажет что получится, но ничего не переименует. Если результат устраивает — уберите -n:
perl-rename 's/ ?\[[^\]]*\]//g' *.m4a *.mp3