Как вы уже знаете, мы используем команду mv для переименования или перемещения файлов и каталогов в Unix-подобных операционных системах.

Но команда mv не будет поддерживать переименование нескольких файлов одновременно.

Она может переименовывать только один файл за раз.

Не волнуйтесь.

Доступно несколько других утилит, особенно для пакетного переименования файлов.

В этом уроке мы научимся переименовывать несколько файлов одновременно в шести разных методах.

Все примеры, представленные здесь, тестируются в Ubuntu 18.04 LTS, однако они должны работать на любых операционных системах Linux.

Давайте начнем!

Переименование нескольких файлов сразу в Linux

Может быть много команд и утилит для переименования группы файлов.

Я буду продолжать обновлять список, если буду сталкиваться с любым методом в будущем.

Метод 1 – Использование mmv

Утилита mmv используется для перемещения, копирования, добавления и переименования файлов в массовом порядке с использованием стандартных подстановочных знаков в Unix-подобных операционных системах.

Она доступна в репозиториях по умолчанию систем на базе Debian.

Чтобы установить его на Debian, Ubuntu, Linux Mint, выполните следующую команду:

$ sudo apt-get install mmv

Скажем, у вас есть следующие файлы в вашем текущем каталоге.

$ ls
a1.txt a2.txt a3.txt

Теперь вы захотите переименовать все файлы, начинающиеся с буквы «a» на «b».

Конечно, вы можете сделать это вручную через несколько секунд.

Но подумайте, есть ли у вас сотни файлов и хотите их все переименовать?

Это довольно трудоемкий процесс. Здесь команда mmv приходит в помощь.

Чтобы переименовать все файлы, начиная с буквы «a» до «b», просто запустите:

$ mmv a\* b\#1

Давайте проверим, были ли файлы переименованы или нет.

$ ls
b1.txt b2.txt b3.txt

Как вы можете видеть, все файлы начинаются с буквы «a» (т.е. a1.txt, a2.txt, a3.txt), переименовываются в b1.txt, b2.txt, b3.txt.

Вы даже можете переименовать все файлы с определенным расширением на другое расширение.

Например, чтобы переименовать все .txt-файлы в формат .doc в текущем каталоге, просто запустите:

$ mmv \*.txt \#1.doc

Вот еще один пример. Скажем, у вас есть следующие файлы.

$ ls
abcd1.txt abcd2.txt abcd3.txt

Вы хотите заменить первое abc на xyz во всех файлах в текущем каталоге. Как бы вы поступили?

Пример

$ mmv '*abc*' '#1xyz#2'

Обратите внимание, что в приведенном выше примере я включил шаблоны в одинарные кавычки.

Давайте проверим, действительно ли «abc» заменено на «xyz» или нет.

$ ls
xyzd1.txt xyzd2.txt xyzd3.txt

Файлы abcd1.txt, abcd2.txt и abcd3.txt были переименованы в xyzd1.txt, xyzd2.txt и xyzd3.txt.

Еще одна заметная особенность команды mmv – вы можете просто посмотреть вывод вместо переименования файлов с помощью опции -n, как показано ниже.

$ mmv -n a\* b\#1 
a1.txt -> b1.txt
a2.txt -> b2.txt
a3.txt -> b3.txt

Таким образом, вы можете просто проверить, что действительно сделала команда mmv, прежде чем переименовывать файлы.

Для получения дополнительной информации см. Справочные страницы.

$ man mmv

Способ 2. Использование утилиты rename

Утилита rename переименовывает данные файлы, заменяя первое выражение в их имени заменой.

Команда rename устанавливается в большинстве Unix-подобных операционных систем.

Если он по умолчанию недоступен, выполните следующую команду, чтобы установить его в системах на базе Debian:

$ sudo apt install rename

Например, у меня есть следующие файлы в текущем каталоге.

$ ls
abcd1.txt abcd2.txt abcd3.txt

Заменим первое  abc на xyz, где бы оно ни находилось. Для этого запустите:

$ rename 's/abc/xyz/' *

Теперь проверьте, были ли сделаны изменения с помощью команды ls.

$ ls
xyzd1.txt xyzd2.txt xyzd3.txt

Иногда вы можете просто вывести выходные данные вместо переименования файлов.

Если это так, используйте флаг -n для отображения тех переименований, которые будут выполняться без их выполнения:

$ rename -n 's/abc/xyz/' *
rename(abcd1.txt, xyzd1.txt)
rename(abcd2.txt, xyzd2.txt)
rename(abcd3.txt, xyzd3.txt)

Как вы можете видеть, приведенная выше команда не вносила никаких изменений, а просто отображает имена переименованных файлов.

Вы можете принудительно переименовать задачу, даже если операция будет перезаписывать существующие файлы с использованием флага -f, как показано ниже.

$ rename -f 's/abc/xyz/' *

Если вы не хотите перезаписывать файлы, вы можете просто преобразовать их в заглавные или строчные буквы (и наоборот), чтобы предотвратить «уже существующие» ошибки.

Чтобы преобразовать все имена файлов в нижний регистр:

$ rename 'y/a-z/A-Z/' *

Давайте проверим, были ли внесены изменения.

$ ls
ABCD1.TXT ABCD2.TXT ABCD3.TXT

Да, буквы в именах файлов были изменены с нижнего регистра на верхний регистр.

Аналогично, чтобы преобразовать имена файлов в нижний регистр, выполните:

$ rename 'y/A-Z/a-z/' *

Мы также можем удалить все пустые ячейки в имени файла.

Например, у меня есть следующий файл.

$ ls
Clouds of Sunset.mp3

Чтобы удалить все пробелы в указанном выше имени файла, запустите:

$ rename "s/ *//g" *

Теперь имя файла не имеет пробелов.

$ ls
CloudsofSunset.mp3

Заменить пробелы символами подчеркивания:

$ rename 's/\s+/_/g' *

Возможно, вы захотите изменить расширение файла, но не переименовать имена файлов.

Это также возможно.

Следующая команда переименовала бы все * .txt-файлы в * .doc.

$ rename 's/\.txt$/.doc/' *.txt

Проверьте изменения с помощью команды ls:

$ ls
abcd1.doc abcd2.doc abcd3.doc

Чтобы удалить расширение во всех файлах, соответствующих .txt, запустите:

$ rename 's/\.txt$//' *.txt

Для получения дополнительной информации см. Справочные страницы.

$ man rename

 

Поделитесь статьей:

Добавить комментарий