Linux system (rename-mv)

Переименование файлов в системах Linux обычно выполняется с помощью команды mv (move). 

Стандартная утилита mv в Linux, не может справиться с переименованием более чем одного файла, если только мы не сделаем небольшой сценарий. Есть и другие утилиты, которые можно установить для решения этой проблемы, например, rename и mmv. В этом руководстве мы покажем вам, как использовать команду mv, а также инструменты rename и mmv для переименования нескольких файлов в вашем дистрибутиве Linux. Мы рассмотрим несколько примеров, чтобы вы могли понять синтаксис и как использовать каждый метод.

Переименование нескольких файлов с помощью команды mv становится проще, если вы знаете сценарии Bash. Посмотрите несколько примеров ниже, чтобы увидеть некоторые распространенные варианты использования этого метода.

Следующая команда добавит расширение .txt ко всем файлам в текущем рабочем каталоге. 

$ for i in $( ls ); do mv $i $i.txt; done

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

$ for i in $( ls *.txt ); do mv $i ${i%.*}; done

Мы также можем изменить расширение каждого файла. Следующая команда изменит все файлы с расширением .log на .txt. 

$ for i in *.log; do mv -- "$i" "${i%.log}.txt"; done

Вы также можете использовать команду find вместе с опцией -exec или команду xargs для переименования нескольких файлов одновременно. Эта команда добавит .bak к каждому файлу, который начинается с шаблона "file". 

$ find . -type f -name 'file*' -print0 | xargs --null -I{} mv {} {}.bak

Эта команда использует find и опцию -exec для добавления "_backup" ко всем файлам, которые заканчиваются расширением .txt. 

$ find . -name "*.txt" -exec mv {} {}_backup \;

Мы также можем использовать xargs, чтобы сделать то же самое. Эта команда примет стандартный ввод от команды ls, а затем с помощью xargs добавит "_backup" ко всем файлам с расширением .txt. 

$ ls *.txt | xargs -I{} mv {} {}_backup

Чтобы изменить все файлы с расширением .txt в текущем каталоге, чтобы они содержали только строчные буквы, выполните команду. 

$ for i in `ls *.txt`; do mv "$i" "`echo $i | tr '[A-Z]' '[a-z]'`"; done

Преимущество этого метода заключается в том, что нам не нужно никакого дополнительного программного обеспечения Linux - мы просто используем встроенную утилиту mv, иногда в сочетании с ls, find или xargs. Однако, как мы видели в этих примерах, это может быть довольно сложно для выполнения такой простой задачи, как переименование нескольких файлов. Ознакомьтесь с некоторыми другими методами ниже, чтобы увидеть более удобные варианты, требующие установки дополнительных пакетов.

Возможно, в вашем дистрибутиве Linux по умолчанию уже установлена программа rename. В случае, если он еще не установлен, вы можете использовать соответствующую команду ниже, чтобы установить его через менеджер пакетов вашей системы.

Для установки rename на Ubuntu, Debian и Linux Mint:

$ sudo apt install rename

Для установки rename на CentOS, Fedora, AlmaLinux и Red Hat:

$ sudo dnf install prename

Чтобы установить rename в Arch Linux и Manjaro:

$ sudo pacman -S perl-rename

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

Здесь мы собрали несколько наиболее распространенных сценариев, когда вам нужно переименовать несколько файлов одновременно. Эти команды предполагают, что файлы, которые вы хотите переименовать, находятся в вашем текущем рабочем каталоге. При желании вы всегда можете указать путь к другим каталогам.

Есть несколько опций, которые можно использовать с rename. Опция -n покажет вам, какие изменения собирается внести rename, не внося изменений. Это поможет вам избежать нежелательных изменений. Опция -v (verbose) выведет имена файлов, которые были успешно переименованы.

Эта команда переименует файлы с прописными буквами в строчные. 

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

Или для преобразования строчных букв в прописные: 

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

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

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

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

$ rename 's/\b(\w)/\U/g' *

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

$ rename "s/ *//g" *

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

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

Чтобы удалить расширение файла из нескольких файлов, используйте следующий синтаксис. В этом примере будет удалено расширение .bak. 

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

Установка утилиты mmv. Вы можете использовать соответствующую команду ниже, чтобы установить mmv через менеджер пакетов в Arch Linux и Manjaro:

$ git clone https://aur.archlinux.org/mmv.git
$ cd mmv/
$ makepkg -si

Наиболее привлекательной особенностью mmv является способность легко переименовывать множество файлов, принимая подстановочные знаки в команде. Это позволяет легко добавлять или удалять определенные шаблоны из имен файлов, или даже упорядочивать текст в именах. Ознакомьтесь с приведенными ниже примерами, чтобы узнать синтаксис инструмента mmv и увидеть некоторые наиболее распространенные команды, которые вы можете выполнить с его помощью. Помните, что в mmv можно использовать опцию -n для предварительного просмотра изменений.

Используйте этот пример для изменения расширения файлов. Эта команда изменит все файлы с расширением .htm на .html. 

$ mmv '*.htm' '#1.html'

Эта команда заменит первое вхождение "foo" на "bar" во всех именах файлов.  

$ mmv '*foo*' '#1bar#2'

Следующая команда дает представление о том, как можно использовать mmv для переименования частей имени файла. В этом примере мы возьмем файлы access.log-dbserver и rejected.log-webserver и переименуем их в access-dbserver.log и rejected-webserver.log соответственно.

$ mmv '*.log-*' '#1-#2.log'

Измените все имена файлов на строчные буквы с помощью этой команды. 

$ mmv '*' '#l1'

И наоборот, с помощью этой программы измените имена файлов на все заглавные буквы. 

$ mmv '*' '#u1'

Массовое переименование можно выполнить с помощью встроенных утилит bash, таких как mv, ls, xargs и find, или же мы можем установить утилиту mmv или rename.