Быстрые ссылки
Массовое переименование файлов — частая задача для новичков в Linux. Если вы не дружите с командной строкой, легко представить, что придётся переименовывать всё вручную — а это уйма времени. На самом деле есть множество простых способов сделать это быстро. Главное — выбрать тот, который подходит именно вам.
Примеры задач по переименованию файлов
Чтобы наглядно показать разные способы, я объясню всё на двух классических примерах. Сценариев может быть масса — всё зависит от ваших целей, структуры файлов и нужного результата. Я приведу популярные задачи, а вашу ситуацию лучше сначала внимательно проанализировать.
Самое важное — понять, что именно вы хотите изменить: что нужно удалить из имени, что оставить, а что — заменить.
В первой задаче требуется сменить расширение у всех подходящих файлов в текущей папке. Например, .txt становится .md: test-001.txt превращается в test-001.md, а ANOTHER.txt — в ANOTHER.md. При этом затрагиваются только файлы, заканчивающиеся на .txt.
Вторая задача чуть сложнее: нужно удалить лишнюю часть из имени файла, а всё остальное оставить. И сделать это рекурсивно по всем подпапкам. Например, все файлы вида DDDD_something.ext должны стать DDDD.ext. То есть 1234_this-is-my-doc.doc → 1234.doc, docs/9999_about.txt → docs/9999.txt и так далее.
1. For-цикл, шаблоны и подстановка параметров
Этот метод использует несколько встроенных возможностей bash, а большинство других оболочек работают схожим образом. Всё крутится вокруг цикла for, который перебирает нужные файлы. Дальше идёт поиск по шаблону (глобу) — это как фильтр по маске. А затем подстановка параметров в имени файла позволяет заменить нужную часть строки на лету.
Для первой задачи (замена .txt на .md) используйте такой код в командной строке:
Цикл for проходит по всем файлам, подходящим под ./*.txt — то есть со всеми .txt файлами в текущей папке.
Внутри цикла команда mv переименует файл. С помощью % убирается окончание (“.txt”), а вместо него добавляется “.md”.
Все примеры даны только для иллюстрации, не запускайте их вслепую на настоящих файлах! Если в именах есть пробелы или спецсимволы, обязательно делайте резервную копию.
Во второй задаче используется более изощрённый шаблон для рекурсивного поиска:
./**/ ищет файлы на всех уровнях подпапок. [[:digit:]] — означает любую цифру, а четыре подряд [[:digit:]] соответствуют формату вроде “1234_что-нибудь.ext”.
Когда лучше выбрать #!/bin/bash вместо #!/bin/sh в shell-скрипте?
Правильный shebang поможет избежать неожиданных ошибок в скриптах. Вот как быстро разобраться, что выбрать.
Перед запуском убедитесь, что ваша оболочка поддерживает такие шаблоны поиска.
Для включения рекурсивных шаблонов в Bash 4+ выполните shopt -s globstar (или добавьте эту строку в скрипт). В macOS оболочка zsh поддерживает такие шаблоны сразу.
2. For-цикл и sed
Вместо подстановки параметров можно подключить sed — мощный инструмент для работы со строками. Он установлен почти в любой Linux-системе, включая macOS.
В этом варианте имя файла изменяется через sed с помощью подстановки команды $(...).
Регулярное выражение заменяет .txt на .md только если оно стоит в конце строки. Знак $ гарантирует, что замена произойдёт только у расширения.
Во втором примере правило sed становится чуть сложнее, но принцип тот же:
В sed можно использовать операторы повторения, например {4} вместо длинного шаблона в glob.
Коды с sed обычно длиннее, но если вы знакомы с регулярками, этот способ покажется максимально понятным и гибким. sed прекрасно подходит для сложных случаев.
3. Команда rename
Утилита rename — это perl-скрипт, который отлично справляется с любыми задачами массового переименования. Возможно, придётся отдельно установить Perl, если он ещё не установлен.
После установки rename справляется с заменой расширения в одну строчку, как в первой задаче:
Регулярные выражения в rename похожи на те, что использовались для sed. Главное отличие — rename применяет замену ко всем переданным файлам сразу, достаточно одной команды!
В rename есть удобный ключ -n или --dry-run, который покажет, как изменятся имена, но без изменений на диске. Очень советую всегда начинать с него, чтобы избежать ошибок.
Вторая задача решается аналогично — одной строкой, хотя регулярка чуть сложнее.
Опять используем расширенный шаблон поиска — так же работает и в подпапках.
4. zmv для оболочки zsh
Если вы используете zsh, можно включить встроенную функцию zmv — это по сути облегчённый “rename”. Чтобы активировать функцию, выполните команду (или добавьте в .zshrc):
После включения zmv первая задача решается одной простой командой:
В отличие от rename, здесь используются не регулярные выражения, а шаблоны, поэтому zmv чуть проще по синтаксису, особенно с ключом -W.
zmv — функция zsh, отдельного man по ней нет, но масса полезных примеров есть в man zshcontrib. У zmv также есть ключ -n для “репетиции” перед реальным запуском.
zmv поддерживает расширенные шаблоны, включая обход вложенных папок.
Хотя шаблоны без регулярных выражений могут казаться громоздкими, они всё равно остаются понятными и удобными для массовых операций.
5. mmv — переименование оптом!
mmv (“multiple move”) — ещё один инструмент для пакетного переименования. Обычно его нужно установить вручную: sudo apt install mmv (для Ubuntu), sudo yum install mmv (RHEL/CentOS/Fedora), brew install mmv (Mac) или аналогичной командой для вашего дистрибутива.
После установки mmv расширения можно поменять буквально одной строчкой:
Фишка mmv — собственный способ построения шаблонов. Здесь есть подстановочный символ ;, который позволяет захватывать любое количество подпапок и переименовывать рекурсивно, как требует вторая задача:
Каждый найденный элемент шаблона в mmv имеет свой номер, и вы можете использовать до семи “захватов” — например, путь к файлу, четыре цифры, часть после подчёркивания (её мы удалим) и расширение.
Шаблоны mmv иногда выглядят неуклюже, но для стандартных задач, вроде замены расширения, инструмент невероятно прост и ясен.
В Linux существует масса вариантов для массового переименования файлов. Всё зависит от ваших привычек и задач: выберите способ, который понятнее всего именно вам. Не забывайте про ключ -n или --dry-run, если он есть — сначала “прогоните” команду без изменений!
Любите регулярные выражения? Вам точно понравится rename. Если сильны в оболочках и шаблонах — попробуйте zmv или mmv. Только учтите: какие-то инструменты работают только в zsh, для некоторых потребуется отдельная установка и специфический синтаксис.
Тем временем, подстановка параметров в bash зачастую оказывается самой быстрой, особенно для регулярных переименований через скрипты. Выбирайте свой вариант — ведь ничто не сравнится с тем, чтобы переименовать сотни файлов в один миг через терминал. Вот где скрыта настоящая мощь Linux!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru