переименовать несколько файлов

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

Затем добавь­те код ниже в нем.

 

Сохра­ни­те и закрой­те файл, затем сде­лай­те скрипт испол­ня­е­мым и запу­сти­те его:

$ chmod +x rename-files.sh

$ rename-files.sh Files #Specify Directory Name