Thank you for reading this post, don't forget to subscribe!
Команда rename может использоваться для переименования одновременно нескольких файлов в Linux. Вот несколько практических сценариев, в которых вы можете использовать команду rename.
Использование команды mv один за другим займет много времени, и этого, безусловно, следует избегать.
Вы можете использовать параметр команды find exec с командой mv для автоматизации этого процесса. Но позвольте нам рассказать вам еще более простой способ переименования файлов на основе шаблона регулярных выражений.
Команда rename в Linux
Существует утилита командной строки под названием rename, которая позволяет вам переименовывать все файлы, которые соответствуют определенному шаблону в форме регулярного выражения Perl. Команда rename работает только с именем файла, а не с самим файлом.
Это синтаксическая команда переименования:
rename [options] perlexpr [files]
Команда rename имеет следующие параметры:
- -v: подробный режим.
- -n: никаких действий Показать файлы, которые будут переименованы, но не переименовывать файлы.
- -о: нет перезаписи. Не перезаписывайте существующие файлы.
- -f: сила. Перезаписать существующие файлы.
- -s: не переименовывать символическую ссылку, но ее цель
Обратите внимание, что команда rename не является стандартной утилитой, предварительно установленной в дистрибутивах Linux, таких как команда mv или cp . Возможно, вам придется установить ее. Если вы пользователь sudo в Ubuntu или Debian, вы можете использовать эту команду для установки переименования:
sudo apt install rename
Теперь вам должно быть интересно, как переименовать файлы с помощью команды rename. Позвольте нам показать два практических сценария, в которых эта команда сэкономит вам много времени.
Сценарий 1: заменить символ другим во всех именах файлов в Linux
Представьте, если у вас есть пробелы в нескольких именах файлов. Это кошмар для обработки пробелов в именах файлов в Linux. Вот почему ни один опытный пользователь никогда не называет файл с пробелами в нем.
Естественно, вы хотите удалить пробелы и заменить их подчеркиванием (_). Команда переименования будет очень удобна здесь. Посмотрим как.
Чтобы заменить пробелы символами подчеркивания в именах всех файлов в текущем каталоге, все, что вам нужно сделать, это использовать команду renam следующим образом:
rename 's/ /_/g' *
Если вы даже отдаленно знакомы с регулярными выражениями , вы поймете, что s / / _ / g ищет пространство и заменяет все вхождения пространства на _.
Интересная часть – звездочка (*). Звездочка говорит вам переименовать соответствующие файлы в текущем каталоге.
Но что, если вы хотите переименовать все соответствующие файлы в подкаталогах? В этом случае вы можете использовать две звездочки, как это:
rename 's/ /_/g' **
Сценарий 2. Изменение расширений нескольких файлов одновременно в Linux
Вот еще один сценарий для вас. У вас есть несколько файлов с именами, такими как my_file.xyz, и вы хотите переименовать эти файлы, чтобы они стали чем-то вроде my_file.abc.
Чтобы изменить расширения нескольких файлов одновременно, вы можете использовать команду переименования следующим образом:
rename 's/.xyz$/.abc/' **
Позвольте нам объяснить вам вышеуказанную команду.
‘s / .xyz $ /. abc /’: это регулярное выражение, которое означает замену символа .xyz в конце строки на .abc.
** означает поиск в текущем каталоге и его подкаталогах.
=======================================================
3. Использование команд find, xargs и rename
rename — это простая утилита командной строки для переименования нескольких файлов одновременно в Linux. Вы можете использовать её вместе с утилитой find для переименования всех файлов или подкаталогов в определенном каталоге в нижний регистр следующим образом:
$ find Files -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;
Объяснение опций, использованных в приведенной выше команде.
- -depth — перечисляет содержимое каждого каталога в самом каталоге.
- -n 1 — указывает xargs использовать не более одного аргумента в командной строке из результатов поиска.
Пример вывода после переименования файлов и подкаталогов в нижний регистр в каталоге Files.
Другой альтернативный способ использования команд find и mv в скрипте, как описано ниже.
4. Использование команд find и mv в скрипте оболочки
Сначала создайте свой скрипт (вы можете назвать его как угодно):
$ cd ~/bin
$ vi rename-files.sh
Затем добавьте код ниже в нем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash #print usage if [ -z $1 ];then echo "Usage :$(basename $0) parent-directory" exit 1 fi #process all subdirectories and files in parent directory all="$(find $1 -depth)" for name in ${all}; do #set new name in lower case for files and directories new_name="$(dirname "${name}")/$(basename "${name}" | tr '[A-Z]' '[a-z]')" #check if new name already exists if [ "${name}" != "${new_name}" ]; then [ ! -e "${new_name}" ] && mv -T "${name}" "${new_name}"; echo "${name} was renamed to ${new_name}" || echo "${name} wasn't renamed!" fi done echo echo #list directories and file new names in lowercase echo "Directories and files with new names in lowercase letters" find $(echo $1 | tr 'A-Z' 'a-z') -depth exit 0 |
Сохраните и закройте файл, затем сделайте скрипт исполняемым и запустите его:
$ chmod +x rename-files.sh
$ rename-files.sh Files #Specify Directory Name