Top.Mail.Ru

Как переименовать файлы в Linux

Как переименовать файлы в 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.htmlnew_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. Так можно сначала найти нужные файлы по условию, а потом применить к ним переименование.

Похожее

Все статьи
146275

Как создать новую папку в Ubuntu

Когда структура файловой системы грамотно продумана, вы быстрее находите нужные данные, реже допускаете ошибки и проще масштабируете проект. Это особенно заметно на сервере: чем больше сервисов, пользователей и файлов, тем выше цена беспорядка в файлах и директориях. Аккуратная иерархия каталогов,…

120402

Как получить доступ к X-UI через SSH-туннель

Во многих случаях намного практичнее получать доступ к X-UI через SSH-туннель: соединение шифруется, сама панель остаётся доступной только на сервере, а у себя на компьютере вы работаете с ней так, будто она запущена локально. Схема здесь очень простая: вы поднимаете…