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

Фатмавати Ахмад Заенури/Shutterstock.com

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

Что не так с mv?

В mv нет ничего плохого. Команда отлично справляется со своей задачей, и ее можно найти во всех дистрибутивах Linux, в macOS и в других Unix-подобных операционных системах. Так что это всегда доступно. Но иногда вам нужен бульдозер, а не лопата.

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

Переименование отдельного файла с помощью mv

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

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

 mv oldfile.txt newfile.txt 
 ls * .txt 

Переименование нескольких файлов с помощью mv

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

Вещи обостряются быстро.

Допустим, у нас есть каталог с различными файлами разных типов. Некоторые из этих файлов имеют расширение «.prog». Мы хотим переименовать их в командной строке, чтобы они имели расширение «.prg».

Как мы можем заставить mv сделать это для нас? Давайте посмотрим на файлы.

 ls * .prog -l 

Вот один из способов сделать это, не прибегая к написанию реального файла скрипта Bash.

 для f в * .prog; do mv - "$ f" "$ {f% .prog} .prg" 

Это сработало? Давайте проверим файлы и посмотрим.

 ls * .pr * 

Так что да, это сработало. Теперь это все файлы «.prg», и в каталоге нет файлов «.prog».

Что сейчас произошло?

Что на самом деле сделала эта длинная команда? Давайте разберемся с этим.

 для f в * .prog; do mv - "$ f" "$ {f% .prog} .prg" 

Первая часть запускает цикл, который по очереди обрабатывает каждый файл «.prog» в каталоге.

Следующая часть говорит, что будет делать обработка . Он использует mv для перемещения каждого файла в новый файл. Новый файл будет назван с именем исходного файла, исключая часть «.prog». Вместо этого будет использовано новое расширение «.prg».

Должен быть более простой путь

Вероятнее всего. Это команда rename .

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

в дистрибутивах, производных от Ubuntu и Debian, вы устанавливаете rename следующим образом:

 sudo apt-get install rename 

В дистрибутивах, производных от Fedora и RedHat, вы устанавливаете prename следующим образом. Обратите внимание на начальный «р», который обозначает Perl.

 sudo dnf install prename 

Чтобы установить его в Manjaro Linux, используйте следующую команду. Обратите внимание, что команда переименования называется perl-rename .

 sudo pacman -Syu perl-rename 

Давайте сделаем это снова

И на этот раз мы будем использовать rename . Мы вернемся назад, чтобы у нас был набор файлов «.prog».

 ls * .prog 

Теперь давайте использовать следующую команду, чтобы переименовать их. Затем мы проверим ls , работает ли он. Не забудьте заменить rename на соответствующее имя команды для вашего Linux, если вы не используете Ubuntu или Linux на основе Debian.

 переименуйте 's/.prog/.prg /' * .prog 
 ls * .pr * 

Это сработало, теперь это все файлы «.prg», и в каталоге не осталось файлов «.prog».

Что случилось в этот раз?

Давайте объясним это волшебство в трех частях.

Часть first – это имя команды, rename (или prename или perl-rename для других дистрибутивов) ,

последняя часть – это *. Prog , которая сообщает rename работать со всеми файлами «.prog».

Часть middle определяет работу, которую мы хотим выполнить с каждым именем файла. s означает замену. Первый термин ( .prog ) – это то, что rename будет искать в каждом имени файла, а второй термин ( .prg ) – это то, что будет заменен на.

Средняя часть команды, или центральное выражение, является регулярным выражением Perl, и именно это придает команде rename свою гибкость.

Изменение других частей имени файла

Пока мы изменили расширения файлов, давайте изменим другие части имен файлов.

В каталоге много файлов с исходным кодом. Все имена файлов имеют префикс «slang_». Мы можем проверить это с помощью ls .

 ls sl * .c 

Мы собираемся заменить все вхождения «slang_» на «sl_». Формат команды нам уже знаком. Мы просто меняем поисковый термин, заменяющий термин и тип файла.

 переименуйте 's/slang_/sl_' * .c 

На этот раз мы ищем файлы «.c» и ищем «slang_». Всякий раз, когда «slang_» встречается в имени файла, оно заменяется «sl_».

Мы можем проверить результат этой команды, повторив команду ls сверху с теми же параметрами:

 ls sl * .c 

Удаление части имени файла

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

 ls * .c 
 переименуйте 's/sl _ //' * .c 
 ls * .c 

Из команды ls мы видим, что все наши файлы «.c» начинаются с «sl_». Давайте избавимся от этого вообще.

Команда rename имеет тот же формат, что и раньше. Мы будем искать файлы «.c». Поисковый термин «sl_», но термин замещения отсутствует. Два обратных слеша без чего-либо между ними ничего не значат, пустая строка.

rename будет обрабатывать каждый файл «.c» по очереди. Он будет искать «sl_» в имени файла. Если он найден, он будет заменен ничем. Другими словами, поисковый термин удаляется.

Повторное использование команды ls подтверждает, что префикс «sl_» был удален из каждого файла «.c».

Ограничить изменения для определенных частей имен файлов

Давайте использовать ls для просмотра файлов, в имени файла которых содержится строка «param». Затем мы будем использовать rename , чтобы заменить эту строку строкой «параметр». Мы будем использовать ls еще раз, чтобы увидеть влияние, которое команда rename оказала на эти файлы.

 ls * param * 
 переименуйте 's/param/parameter' * .c 
 ls * param * 

Найдено четыре файла с именем «param» в имени файла. param.c, param_one.c и param_two.c имеют «param» в начале начала своего имени. third_param.c имеет «param» в end своего имени, непосредственно перед расширением.

Команда rename будет искать «param» везде в имени файла и заменять его «параметром» во всех случаях.

Второе использование команды ls показывает нам, что именно это и произошло. Независимо от того, был ли «param» в начале или в конце имени файла, он был заменен «параметром».

Мы можем использовать метасимволы Perl для уточнения поведения среднего выражения. Метасимволы – это символы, которые представляют позиции или последовательности символов. Например, ^ означает «начало строки», $ означает «конец строки», а . означает любой отдельный символ (кроме от символа новой строки).

Мы собираемся использовать метасимвол начала строки ( ^ ), чтобы ограничить наш поиск началом имен файлов.

 ls * param * .c 
 переименовать 's/^ параметр/значение /' * .c 
 ls * param * .c 
 ls value * .c 

Перечислены файлы, которые мы переименовали ранее, и мы можем видеть строку «параметр» в начале трех имен файлов и в конце одного из имен файлов.

Наша команда rename использует метасимвол начала строки (^ ) перед поисковым термином «параметр». Это говорит rename только о поисковом термине быть найденным, если оно находится в начале имени файла. Строка поиска «параметр» будет игнорироваться, если она находится где-либо еще в имени файла.

Проверяя ls , мы видим, что имя файла с «параметром» в конце имени файла не было изменено, но три имени файла с «параметром» в начало в их именах строка поиска заменена заменой термина «значение».

Сила rename заключается во власти Perl. Вся мощь Perl в вашем распоряжении.

Поиск с группировками

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

В этом примере мы используем ls , чтобы проверить, какие файлы у нас есть, которые начинаются с «str». Есть два из них, string.c и strangle.c. Мы можем переименовать обе строки одновременно, используя технику, называемую группированием.

Центральное выражение этой команды rename будет искать строки в именах файлов, которые имеют последовательность символов «stri» или «stra», где за этими последовательностями сразу следует «ng». Другими словами, наш поисковый термин будет искать «string» и «strang». Подстановочный термин – «взрыв».

 ls str * .c 
 переименовать 's/(stri | stra) ng/bang /' * .c 
 ls ban * .c 

Повторное использование ls подтверждает, что string.c стал bang.c, а strangle.c теперь bangle.c.

Использование переводов с переименованием

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

В приведенной ниже команде rename обратите внимание, что мы не используем s/ для запуска центрального выражения, мы используем y/. Это говорит о том, что rename мы не выполняем замену; мы выполняем перевод.

Термин a-z является выражением Perl, которое означает все строчные символы в последовательности от a до z. Точно так же термин A-Z представляет все заглавные буквы в последовательности от A до Z.

Центральное выражение в этой команде можно перефразировать следующим образом: «если в имени файла обнаружены строчные буквы от a до z, замените их соответствующими символами из последовательности заглавных букв от A до Z».

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

переименуйте «y/a-z/A-Z /’ * .prg »

 ls * .PRG 

Команда ls показывает нам, что все имена файлов «.prg» теперь в верхнем регистре. На самом деле, если быть точным, они больше не являются файлами «.prg». Это файлы «.PRG». Linux чувствителен к регистру.

Мы можем отменить эту последнюю команду, изменив положение терминов a-z и A-Z в центральном выражении.

переименуйте «y/A-Z/a-z /’ * .PRG »

 ls * .prg 

Вы (Wo | Do) не изучаете Perl за пять минут

Освоение Perl – хорошо проведенное время. Но чтобы начать использовать возможности экономии времени команды rename , вам совсем не нужно много знать Perl, чтобы получить большие преимущества в мощности, простоте и времени.

Оцените статью
TutoryBird.Ru
Добавить комментарий