Как переименовать сразу несколько каталогов на Linux

by itisgood

Переименовать один каталог в Linux просто и легко.

В то время как для работы с несколькими каталогами нам необходимо использовать специальные команды, скрипты или комбинацию различных команд.

В этом руководстве мы узнаем, как переименовать сразу несколько каталогов в Linux.

Переименование каталогов с помощью команды rename

Команда rename в основном используется для переименования нескольких файлов с помощью регулярных выражений.

Мы также можем использовать ее для одновременного переименования нескольких каталогов.

Утилита rename не установлена по умолчанию в большинстве дистрибутивов Linux.

Она легко доступна в стандартных репозиториях ОС и может быть легко установлена с помощью менеджера пакетов.

Примечание: в дистрибутивах на базе RHEL команда rename известна как prename.

Синтаксис:

rename 's/old-dir-name/new-dir-name/' old-dir-name*

Это переименует все каталоги в текущем каталоге, начиная с имени old-directory, в new-dir-name.

Например, чтобы переименовать каталоги с именами dir1, dir2 и dir3 в newdir1, newdir2 и newdir3 соответственно, введите:

rename -v 's/dir/newdir/' dir?

Все каталоги с именем dir изменяются на newdir с помощью команды rename.

Примечание: Команда rename не запрашивает подтверждения перед внесением изменений, поэтому будьте осторожны при выполнении этой команды.

Я бы рекомендовал сначала использовать опцию -n, чтобы выполнить пробный запуск, который покажет вам изменения, которые будут сделаны, не делая их на самом деле.

Использование скрипта

Давайте рассмотрим несколько примеров использования скриптов для массового переименования каталогов.

Здесь я буду использовать два скрипта на bash.

Пример 1:

Давайте воспользуемся циклом for для переименования нескольких каталогов путем поиска каталогов в текущем каталоге, а затем переименуем их с помощью команды mv:

#!/bin/bash

old_string="dir"
new_string="newdir"

for dir in *; do
  if [ -d "$dir" ]; then
    new_dirname="${dir//$old_string/$new_string}"
    mv -v "$dir" "$new_dirname"
  fi
done

Запустите bash скрипт:

bash rename-newdir-loop.sh

Мы использовали цикл for для перебора текущей директории и проверки, является ли каждый объект директорией.

Если это каталог, то используйте команду mv для переименования каталога.

Пример 2:

Используем следующий скрипт для поиска всех каталогов в текущем каталоге с именем ‘dir’ и переименования их в ‘newdir’ с помощью команды rename.

#!/bin/bash

dirs=$(find . -type d -name '*dir*')
rename 's/dir/newdir/g' $dirs

Запустите скрипт , введите:

bash dirs-rename.sh

Здесь мы использовали команду find для поиска каталогов с именем dir в текущем каталоге.

Затем использовали команду rename для замены всех вхождений этого имени на имя newdir.

Поиск и переименование каталогов

Давайте проверим, как использовать команду find для поиска каталогов и их переименования. Для иллюстрации я привел несколько примеров.

01. Поиск и переименование каталогов с помощью команды rename

Чтобы найти все каталоги в текущем каталоге и его подкаталогах с именем dir и переименовать их в testdir, введите:

find . -type d -name '*' | rename 's\dir\newdir\'

Здесь мы использовали команду find с командой rename для переименования нескольких каталогов.

02. Поиск и переименование каталогов с помощью команды mv

В следующем примере сначала используется команда find для поиска всех каталогов в текущем каталоге и его подкаталогах, имена которых содержат строку “dir”.

Затем используется флаг exec в команде mv для переименования каталогов, заменяя ‘dir’ на ‘testdir’ с помощью команды sed.

find . -type d -name '*dir*' -exec bash -c 'mv "$1" "$(echo "$1" | sed "s/dir*/testdir/g")"' _ {} \;
Следующая команда использует mv для переименования каталога путем добавления расширения “.abc” в конец исходного имени.
find . -type d -name 'dir*' -exec mv {} {}.abc \;
В следующей команде мы использовали команду find для поиска каталогов, соответствующих регулярному выражению ‘.*/dir.*’.
Для каждого совпадения запускается флаг exec для выполнения операции переименования.
find . -type d -regex '.*/dir.*' -exec mv {} {}testdir \;

Заключение

В этом уроке мы узнали, как переименовывать каталоги в Linux из командной строки в массовом порядке.

Мы использовали команду rename, сценарий bash и find с помощью mv.

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

Спасибо за прочтение, пожалуйста, оставляйте свои предложения и отзывы в разделе комментариев ниже.

см. также:

 

You may also like

Leave a Comment