Найти в Дзене
Герман Геншин

Вы не поверите своим глазам! 5 способов молниеносно переименовать сотни файлов в Linux — забудьте про муторную рутину!

Массовое переименование файлов — частая задача для новичков в Linux. Если вы не дружите с командной строкой, легко представить, что придётся переименовывать всё вручную — а это уйма времени. На самом деле есть множество простых способов сделать это быстро. Главное — выбрать тот, который подходит именно вам. Чтобы наглядно показать разные способы, я объясню всё на двух классических примерах. Сценариев может быть масса — всё зависит от ваших целей, структуры файлов и нужного результата. Я приведу популярные задачи, а вашу ситуацию лучше сначала внимательно проанализировать. Самое важное — понять, что именно вы хотите изменить: что нужно удалить из имени, что оставить, а что — заменить. В первой задаче требуется сменить расширение у всех подходящих файлов в текущей папке. Например, .txt становится .md: test-001.txt превращается в test-001.md, а ANOTHER.txt — в ANOTHER.md. При этом затрагиваются только файлы, заканчивающиеся на .txt. Вторая задача чуть сложнее: нужно удалить лишнюю часть
Оглавление

Быстрые ссылки

Массовое переименование файлов — частая задача для новичков в 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!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: