Команда rename

Опубликовано admin - пн, 05/08/2023 - 13:57

Команду rename в Linux целесообразно использовать при групповом переименовании файлов или замены определённых символов или частей имени файла.

Команда rename группового переименования файлов

Содержание

Установка

Если команда 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 показывают насколько она полезна. Применение этой утилиты в работе не будет представлять никаких сложностей для начинающего системного администратора.

Поделиться с друзьями