Как переименовать файлы в Linux
Переименование файлов в Linux может показаться простой или даже незначительной задачей на первый взгляд. Однако, все меняется ровно в тот момент, когда приходится срочно переименовывать десятки файлов. Один документ можно переименовать вручную, пару файлов через простую команду mv, а вот для массовых изменений уже удобнее брать другие инструменты: rename, find, Bash-скрипты или встроенные возможности файлового менеджера.
В этой статье разберём несколько способов переименования файлов в Linux — от самого простого до более гибких вариантов для пакетной обработки.
Переименование файла через mv
Команда mv обычно используется для перемещения файлов и каталогов. Но в Linux переименование устроено почти так же: система просто «перемещает» файл из старого имени в новое. Если путь остаётся тем же, меняется только название.
Базовый синтаксис очень простой:
mv old_filename new_filename
Например, есть файл doc1.txt, а нужно назвать его doc2.txt. Для этого выполните:
mv doc1.txt doc2.txt
После выполнения команды файл останется в текущем каталоге, но уже под новым именем.
На практике перед такой операцией полезно посмотреть, какие файлы вообще находятся в папке:
ls
Это особенно важно, если новое имя может совпасть с уже существующим файлом. По умолчанию mv может перезаписать файл без лишних вопросов, поэтому для более осторожной работы можно использовать параметр -i:
mv -i file1.txt file2.txt
В этом случае терминал попросит подтверждение, если файл file2.txt уже существует.
Когда достаточно mv
mv — лучший вариант для простых случаев. Например, когда нужно переименовать один конфигурационный файл, изменить название архива, поправить имя документа или переименовать каталог.
Пример:
mv article_old.txt article_new.txt
Команда понятная, быстрая и не требует установки дополнительных утилит. Но у неё есть очевидное ограничение: если файлов много, писать отдельную команду для каждого неудобно. В таких случаях лучше использовать инструменты для массового переименования.
Массовое переименование через rename
Для пакетного переименования в Linux часто используют команду rename. Она позволяет менять имена файлов по шаблону: заменить расширение, добавить префикс, убрать лишнюю часть имени, привести файлы к единому виду.
В Debian и Ubuntu утилиту можно установить так:
sudo apt install rename
В Fedora, CentOS или RHEL название пакета может отличаться в зависимости от версии системы и подключённых репозиториев. Часто используется вариант:
sudo dnf install prename
После установки можно проверить, доступна ли команда:
rename --version
Один из распространённых вариантов rename работает с выражениями в стиле Perl. Общий шаблон выглядит так:
rename 's/что_меняем/на_что_меняем/' файлы
Допустим, в каталоге есть несколько файлов:
file1.txt
file2.txt
file3.txt
И нужно заменить расширение .txt на .md. Для этого подойдёт команда:
rename ‘s/\.txt$/.md/’ *.txt
Здесь важно выражение \.txt$. Оно означает: найти .txt именно в конце имени файла. Благодаря этому команда не будет менять случайные совпадения в середине названия.
После выполнения файлы будут называться так:
file1.md
file2.md
file3.md
Как добавить префикс или суффикс
rename удобен не только для замены расширений. Например, можно добавить префикс ко всем HTML-файлам:
rename 's/^/new_/' *.html
Символ ^ указывает на начало имени. Поэтому index.html станет new_index.html, а about.html — new_about.html.
Если нужно добавить суффикс перед расширением, можно сделать так:
rename 's/\.txt$/_backup.txt/' *.txt
Файл notes.txt после такой команды превратится в notes_backup.txt.
Перед массовым переименованием лучше сначала проверить, какие файлы попадут под шаблон:
ls *.txt
Это простая привычка, которая помогает не переименовать лишнее.
Переименование через find и mv
Иногда файлы лежат не в одной папке, а разбросаны по нескольким каталогам. Например, в проекте могут быть логи в разных директориях, и всем им нужно заменить расширение. В такой ситуации удобно использовать find.
Допустим, нужно найти все файлы .log в текущем каталоге и вложенных папках, а затем переименовать их в .txt. Команда может выглядеть так:
find . -name "*.log" -exec bash -c 'mv "$1" "${1%.log}.txt"' -- {} \;
Она выглядит сложнее, чем обычный mv, но логика у неё понятная.
find . запускает поиск от текущего каталога.
-name «*.log» выбирает файлы с расширением .log.
-exec выполняет команду для каждого найденного файла.
«${1%.log}.txt» убирает старое расширение .log и добавляет .txt.
Перед запуском команды с переименованием лучше сначала посмотреть список найденных файлов:
find . -name "*.log"
Если результат совпадает с ожиданиями, можно запускать вариант с mv.
Такой подход особенно полезен, когда нужно обработать большое дерево каталогов, а не одну папку.
Какой способ выбрать
Для одного файла почти всегда достаточно mv. Это самый простой и понятный вариант.
Если нужно переименовать много файлов в одной папке, удобнее использовать rename. Он хорошо подходит для замены расширений, добавления префиксов и других однотипных изменений.
Если файлы находятся в разных каталогах, лучше брать find вместе с mv. Так можно сначала найти нужные файлы по условию, а потом применить к ним переименование.
Похожее
Все статьи
Как создать новую папку в Ubuntu
Когда структура файловой системы грамотно продумана, вы быстрее находите нужные данные, реже допускаете ошибки и проще масштабируете проект. Это особенно заметно на сервере: чем больше сервисов, пользователей и файлов, тем выше цена беспорядка в файлах и директориях. Аккуратная иерархия каталогов,…
Как получить доступ к X-UI через SSH-туннель
Во многих случаях намного практичнее получать доступ к X-UI через SSH-туннель: соединение шифруется, сама панель остаётся доступной только на сервере, а у себя на компьютере вы работаете с ней так, будто она запущена локально. Схема здесь очень простая: вы поднимаете…