Переименование файлов — одна из самых основных задач, которые вам часто приходится выполнять в системе Linux. Вы можете переименовывать файлы с помощью файлового менеджера с графическим интерфейсом или через терминал командной строки.
Переименовать один файл легко, но одновременное переименование нескольких файлов может быть проблемой, особенно для пользователей, которые не знакомы с Linux.
В этой статье вы узнаете, как использовать команды mv и rename для переименования файлов и каталогов.
Переименование файлов с помощью mv
команды
Команда (за mv
исключением перемещения) используется для переименования или перемещения файлов из одного места в другое. Синтаксис mv
команды следующий:
mv [OPTIONS] source destination
Это source
может быть один или несколько файлов или каталогов, а destination
может быть один файл или каталог.
- Если вы укажете несколько файлов как
source
, этоdestination
должен быть каталог. В этом случаеsource
файлы перемещаются в целевой каталог. - Если вы укажете один файл как
source
, аdestination
целью является существующий каталог, то файл будет перемещен в указанный каталог. - Чтобы переименовать файл, вам нужно указать один файл в качестве
source
и один файл в качествеdestination
цели.
Например, чтобы переименовать файл, file1.txt
как file2.txt
вы бы запустили:
mv file1.txt file2.txt
Переименование нескольких файлов с помощью mv
команды
Команда mv
может переименовывать только один файл за раз, но ее можно использовать в сочетании с другими командами, такими как find
или внутри bash for
или while
циклами, для переименования нескольких файлов.
В следующем примере показано, как использовать цикл for в Bash для переименования всех .html
файлов в текущем каталоге, изменив .html
расширение на .php
.
for f in *.html; do
mv -- "$f" "${f%.html}.php"
done
Разберем код построчно:
- Первая строка создает
for
цикл и выполняет итерацию по списку всех файлов с окантовкой.html
. - Вторая строка применяется к каждому элементу списка и перемещает файл на новый, заменяя его
.html
на.php
. Часть${file%.html}
использует расширение параметра оболочки для удаления.html
части из имени файла. done
указывает на конец сегмента цикла.
Вот пример использования mv
в сочетании с find
для достижения того же, что и выше:
find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \;
Команда find
передает все файлы, заканчивающиеся .html
на в текущем каталоге, mv
один за другим, используя -exec
опцию. Строка {}
представляет собой имя файла, обрабатываемого в данный момент.
Как видно из приведенных выше примеров, переименование нескольких файлов с помощью mv
команды — непростая задача, поскольку для этого требуется хорошее знание сценариев Bash.
Переименование файлов с помощью rename
команды
Команда rename
используется для переименования нескольких файлов. Эта команда является более продвинутой, mv
поскольку требует некоторых базовых знаний о регулярных выражениях.
Есть две версии rename
команды с разным синтаксисом. В этом уроке мы будем использовать Perl-версию rename
команды. Если эта версия не установлена в вашей системе, вы можете легко установить ее с помощью менеджера пакетов вашего дистрибутива.
Установить rename
на Ubuntu и Debian
sudo apt install rename
Установка rename
на CentOS и Fedora
sudo yum install prename
Установить rename
на ArchLinux
yay perl-rename ## or yaourt -S perl-rename
Синтаксис rename
команды следующий:
rename [OPTIONS] perlexpr files
Команда rename
переименует в files
соответствии с указанным perlexpr
регулярным выражением.
В следующем примере все файлы с расширением будут изменены .html
на .php
:
rename 's/.html/.php/' \*.html
Вы можете использовать -n
опцию печати имен файлов, которые нужно переименовать, не переименовывая их.
rename -n 's/.html/.php/' \*.html
По умолчанию rename
команда не перезаписывает существующие файлы. Передайте -f
параметр, чтобы разрешить перезапись существующих файлов:
rename -f 's/.html/.php/' \*.html
Ниже приведены еще несколько распространенных примеров использования rename
команды:
Замените пробелы в именах файлов символами подчеркивания
rename 'y/ /\_/' \*
Преобразование имен файлов в нижний регистр
rename 'y/A-Z/a-z/' \*
Преобразование имен файлов в верхний регистр
rename 'y/a-z/A-Z/' \*
0 комментариев