Команду rename
в Linux целесообразно использовать при групповом переименовании файлов или замены определённых символов или частей имени файла.
Содержание
Установка
Если команда rename
изначально не установлена в вашем дистрибутиве, то её можно будет достаточно просто установить.
Установка в Ubuntu:
$ sudo apt install rename
В Arch Linux нет необходимости в установке этой утилиты, так как она входит в пакет util-linux
.
Синтаксис
rename [options] <expression> <replacement> <file>...
Опции
- -v, --verbose
- Объяснить производимые действия
- -s, --symlink
- Переименовывать цели символьных ссылок
- -n, --no-act
- Не вносить никаких изменений
- -a, --all
- Заменить все вхождения
- -l, --last
- Заменить только последнее вхождение
- -o, --no-overwrite
- Не перезаписывать существующие файлы
- -i, --interactive
- Запрос перед перезаписью
- -h, --help
- Вывести справку
- -V, --version
- Вывести версию
Использование команды rename в Linux
Переименование всех файлов в каталоге
Для примера воспользуется каталогом Directory
:
oleg@mobile:~/Directory:$ ls -l
итого 20
-rw-r--r-- 1 oleg users 330 янв 30 14:51 example.txt
-rw-r--r-- 1 oleg users 806 сен 10 2022 usa-capitals-ru.txt
-rw-r--r-- 1 oleg users 1706 сен 10 2022 usa-states-capitals.txt
-rw-r--r-- 1 oleg users 1136 сен 10 2022 usa-states-ru.txt
-rw-r--r-- 1 oleg users 469 сен 30 2022 usa-states.txt
oleg@mobile:~/Directory:$
Переименуем в каталоге все файлы, заменив суффиксы файлов с .txt
на .tx
:
oleg@mobile:~/Directory:$ rename .txt .tx *.txt
oleg@mobile:~/Directory:$
Полученный результат:
oleg@mobile:~/Directory:$ ls -l
итого 20
-rw-r--r-- 1 oleg users 330 янв 30 14:51 example.tx
-rw-r--r-- 1 oleg users 806 сен 10 2022 usa-capitals-ru.tx
-rw-r--r-- 1 oleg users 1706 сен 10 2022 usa-states-capitals.tx
-rw-r--r-- 1 oleg users 1136 сен 10 2022 usa-states-ru.tx
-rw-r--r-- 1 oleg users 469 сен 30 2022 usa-states.tx
oleg@mobile:~/Directory:$
Замена дефиса на подчёркивание
Некоторые имена файлов имеют более одного дефиса. Запустим утилиту с опцией -a
, так как без неё будет изменено лишь первое вхождение:
oleg@mobile:~/Directory:$ rename -a '-' '_' *.tx
oleg@mobile:~/Directory:$
Во втором примере я использовал кавычки, а в первом не использовал. Я этим хотел показать лишь то, что команда работала и без них.
Полученный результат:
oleg@mobile:~/Directory:$ ls -l
итого 20
-rw-r--r-- 1 oleg users 330 янв 30 14:51 example.tx
-rw-r--r-- 1 oleg users 806 сен 10 2022 usa_capitals_ru.tx
-rw-r--r-- 1 oleg users 1706 сен 10 2022 usa_states_capitals.tx
-rw-r--r-- 1 oleg users 1136 сен 10 2022 usa_states_ru.tx
-rw-r--r-- 1 oleg users 469 сен 30 2022 usa_states.tx
oleg@mobile:~/Directory:$
Удаление нежелательных символов
В этом примере я специально добавил в те же файлы пробелы перед символом подчёркивания:
oleg@mobile:~/Directory:$ ls -l
итого 20
-rw-r--r-- 1 oleg users 330 янв 30 14:51 example.tx
-rw-r--r-- 1 oleg users 806 сен 10 2022 'usa _capitals _ru.tx'
-rw-r--r-- 1 oleg users 1706 сен 10 2022 'usa _states _capitals.tx'
-rw-r--r-- 1 oleg users 1136 сен 10 2022 'usa _states _ru.tx'
-rw-r--r-- 1 oleg users 469 сен 30 2022 'usa _states.tx'
oleg@mobile:~/Directory:$
В именах файлов операционной системы Linux использование символа пробела крайне нежелательно.
Удалим пробелы:
oleg@mobile:~/Directory:$ rename -a ' _' '_' *
oleg@mobile:~/Directory:$
Результат:
oleg@mobile:~/Directory:$ ls -l
итого 20
-rw-r--r-- 1 oleg users 330 янв 30 14:51 example.tx
-rw-r--r-- 1 oleg users 806 сен 10 2022 usa_capitals_ru.tx
-rw-r--r-- 1 oleg users 1706 сен 10 2022 usa_states_capitals.tx
-rw-r--r-- 1 oleg users 1136 сен 10 2022 usa_states_ru.tx
-rw-r--r-- 1 oleg users 469 сен 30 2022 usa_states.tx
oleg@mobile:~/Directory:$
Будущий результат
Во избежание ошибок при переименовании файлов можно до начала переименования проверить будущий результат. Для этого утилита используется с опцией -n
, не позволяющей произвести переименование, и опцией -v
, показывающей процесс.
Для примера проверим результат преобразования в именах файлов подчёркивания в дефис:
oleg@mobile:~/Directory:$ rename -anv '_' '-' *.tx
oleg@mobile:~/Directory:$ rename -anv '_' '-' *.tx
`usa_capitals_ru.tx' -> `usa-capitals-ru.tx'
`usa_states_capitals.tx' -> `usa-states-capitals.tx'
`usa_states_ru.tx' -> `usa-states-ru.tx'
`usa_states.tx' -> `usa-states.tx'
oleg@mobile:~/Directory:$
В имена файлов не было внесено никаких изменений:
oleg@mobile:~/Directory:$ ls -l
итого 20
-rw-r--r-- 1 oleg users 330 янв 30 14:51 example.tx
-rw-r--r-- 1 oleg users 806 сен 10 2022 usa_capitals_ru.tx
-rw-r--r-- 1 oleg users 1706 сен 10 2022 usa_states_capitals.tx
-rw-r--r-- 1 oleg users 1136 сен 10 2022 usa_states_ru.tx
-rw-r--r-- 1 oleg users 469 сен 30 2022 usa_states.tx
oleg@mobile:~/Directory:$
Заключение
Приведённые несколько примеров использования в Linux команды rename
показывают насколько она полезна. Применение этой утилиты в работе не будет представлять никаких сложностей для начинающего системного администратора.