Cum să utilizați comanda de redenumire pe Linux

Familiarizați-vă cu puterea de redenumire a fișierelor din lumea Linux și odihniți-vă mv și dumneavoastră. Redenumirea este flexibilă, rapidă și uneori chiar mai ușoară. Iată un tutorial pentru această putere de comandă.

Ce e în neregulă cu mv?

Nu este nimic în neregulă cu mv. Comanda face o treaba bunași se găsește pe toate distribuțiile Linux, în macOS și în alte sisteme de operare asemănătoare Unix. Deci este întotdeauna disponibil. Dar uneori ai nevoie doar de un buldozer, nu de o lopată.

Comanda mv are un scop în viață și anume mutarea fișierelor. Este un efect secundar fericit că poate fi folosit pentru a muta un fișier existent într-un fișier nou, cu un nume nou. Efectul net este de a redenumi fișierul, astfel încât să obținem ceea ce ne dorim. Dar mv nu este un instrument dedicat de redenumire a fișierelor.

Redenumirea unui singur fișier cu mv

Pentru a utiliza mv pentru a redenumi un fișier, tastați mv, un spațiu, numele fișierului, un spațiu și noul nume pe care doriți să îl aibă fișierul. Apoi apăsați Enter.

Puteți folosi ls pentru a verifica dacă fișierul a fost redenumit.

mv oldfile.txt newfile.txt
ls *.txt

Redenumirea mai multor fișiere cu mv

Lucrurile devin mai complicate atunci când doriți să redenumiți mai multe fișiere. mv nu are capacitatea de a se ocupa de redenumirea mai multor fișiere. Trebuie să apelezi la folosirea unor trucuri ingenioase Bash. Este în regulă dacă cunoașteți niște fu de linie de comandă de grad mediu, dar complexitatea redenumiri mai multe fișiere cu mv este în contrast puternic cu ușurința de a utiliza mv pentru a redenumi un singur fișier.

Lucrurile escaladează rapid.

Să presupunem că avem un director cu o varietate de fișiere în el, de diferite tipuri. Unele dintre aceste fișiere au extensia „.prog”. Vrem să le redenumim la linia de comandă, astfel încât să aibă o extensie „.prg”.

Cum îl facem pe mv să facă asta pentru noi? Să aruncăm o privire la fișiere.

ls *.prog -l

Iată o modalitate de a face asta, care nu recurge la scrierea unui fișier script Bash real.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

pentru f în *.prog; face mv --

A funcționat? Să verificăm fișierele și să vedem.

ls *.pr*

Deci, da, a funcționat. Toate sunt fișiere „.prg” acum și nu există fișiere „.prog” în director.

  Cum se instalează Xonotic pe Linux

Ce s-a intamplat?

Ce a făcut de fapt acea comandă lungă? Să-l descompunem.

for f in *.prog; do mv -- "$f" "${f%.prog}.prg"

Prima parte începe o buclă care va procesa pe rând fiecare fișier „.prog” din director.

Următoarea parte spune ce va face procesarea. Folosește mv pentru a muta fiecare fișier într-un fișier nou. Noul fișier va fi numit cu numele fișierului original, excluzând partea „.prog”. În schimb, va fi folosită o nouă extensie a „.prg”.

Trebuie să existe o cale mai simplă

Cel mai sigur. Este comanda de redenumire.

redenumirea nu face parte dintr-o distribuție standard Linux, așa că va trebui să o instalați. De asemenea, are un nume diferit în diferite familii de Linux, dar toate funcționează în același mod. Va trebui doar să înlocuiți numele de comandă corespunzător în funcție de versiunea Linux pe care o utilizați.

în distribuțiile Ubuntu și derivate din Debian, instalați redenumiți astfel:

sudo apt-get install rename

În distribuțiile derivate din Fedora și RedHat, instalați prename astfel. Observați „p” inițial, care înseamnă Perl.

sudo dnf install prename

Pentru a-l instala în Manjaro Linux, utilizați următoarea comandă. Rețineți că comanda de redenumire se numește perl-rename.

sudo pacman -Syu perl-rename

Să facem asta din nou

Și de data aceasta vom folosi redenumirea. Vom derula ceasul înapoi, astfel încât să avem un set de fișiere „.prog”.

ls *.prog

Acum să folosim următoarea comandă pentru a le redenumi. Apoi vom verifica cu ls dacă a funcționat. Nu uitați să înlocuiți redenumirea cu numele de comandă adecvat pentru Linux-ul dvs. dacă nu utilizați Ubuntu sau un Linux derivat din Debian.

rename 's/.prog/.prg/' *.prog
ls *.pr*

A funcționat, acum toate sunt fișiere „.prg” și nu au mai rămas fișiere „.prog” în director.

Ce sa întâmplat de data asta?

Să explicăm acel pic de magie, în trei părți.

Prima parte este numele comenzii, rename (sau prename sau perl-rename , pentru celelalte distribuții).

Ultima parte este *.prog, care spune redenumirii să opereze pe toate fișierele „.prog”.

Partea din mijloc definește munca pe care vrem să o facem pentru fiecare nume de fișier. S înseamnă înlocuitor. Primul termen (.prog) este ceea ce redenumirea va căuta în fiecare nume de fișier, iar al doilea termen (.prg) este ceea ce va fi înlocuit.

Partea din mijloc a comenzii, sau expresia centrală, este un Perl ‘expresie uzuala‘ și este ceea ce oferă comenzii de redenumire flexibilitatea sa.

Modificarea altor părți ale unui nume de fișier

Am schimbat extensiile de nume de fișiere până acum, haideți să modificăm alte părți ale numelor de fișiere.

În director se află o mulțime de fișiere de cod sursă C. Toate numele de fișiere sunt prefixate cu „slang_”. Putem verifica asta cu ls.

ls sl*.c

Vom înlocui toate aparițiile lui „slang_” cu „sl_”. Formatul comenzii ne este deja familiar. Schimbăm doar termenul de căutare, termenul de înlocuire și tipul de fișier.

rename 's/slang_/sl_' *.c

De data aceasta căutăm fișiere „.c” și căutăm „slang_”. Ori de câte ori „slang_” este găsit într-un nume de fișier, acesta este înlocuit cu „sl_”.

  Cum să faci o copie de rezervă a setărilor desktop LXQt pe Linux

Putem verifica rezultatul acelei comenzi repetând comanda ls de mai sus cu aceiași parametri:

ls sl*.c

Ștergerea unei părți a unui nume de fișier

Putem elimina o parte a unui nume de fișier înlocuind termenul de căutare cu nimic.

ls *.c
rename 's/sl_//' *.c
ls *.c

Putem vedea din comanda ls că fișierele noastre „.c” sunt toate predate cu „sl_”. Să scăpăm cu totul de asta.

Comanda de redenumire urmează același format ca înainte. Vom căuta fișiere „.c”. Termenul de căutare este „sl_”, dar nu există un termen de substituție. Două bare oblice inverse fără nimic între ele înseamnă nimic, un șir gol.

redenumirea va procesa pe rând fiecare fișier „.c”. Acesta va căuta „sl_” în numele fișierului. Dacă se găsește, nu va fi înlocuit cu nimic. Cu alte cuvinte, termenul de căutare este șters.

A doua utilizare a comenzii ls confirmă faptul că prefixul „sl_” a fost eliminat din fiecare fișier „.c”.

Limitați modificările la anumite părți ale numelor de fișiere

Să folosim ls pentru a privi fișierele care au șirul „param” în numele fișierului. Apoi vom folosi rename pentru a înlocui acel șir cu șirul „parametru”. Vom folosi ls încă o dată pentru a vedea efectul pe care l-a avut comanda de redenumire asupra acelor fișiere.

ls *param*
rename 's/param/parameter' *.c
ls *param*

S-au găsit patru fișiere care au „param” în numele fișierului. param.c, param_one.c și param_two.c au toate „param” la începutul numelui lor. third_param.c are „param” la sfârșitul numelui său, chiar înainte de extensie.

Comanda de redenumire va căuta „param” peste tot în numele fișierului și o va înlocui cu „parametru” în toate cazurile.

A doua utilizare a comenzii ls ne arată că exact asta s-a întâmplat. Indiferent dacă „param” a fost la începutul sau la sfârșitul numelui fișierului, a fost înlocuit cu „parametru”.

Putem folosi metacaracterele lui Perl pentru a rafina comportamentul expresiei din mijloc. Metacaracterele sunt simboluri care reprezintă poziții sau secvențe de caractere. De exemplu, ^ înseamnă „începutul unui șir”, $ înseamnă „sfârșitul unui șir” și . înseamnă orice caracter unic (în afară de un caracter nou linie).

Vom folosi începutul metacaracterului șirului ( ^ ) pentru a restricționa căutarea la începutul numelor fișierelor.

ls *param*.c
rename 's/^parameter/value/' *.c
ls *param*.c
ls value*.c

Fișierele pe care le-am redenumit mai devreme sunt listate și putem vedea că șirul „parametru” este la începutul a trei nume de fișiere și este la sfârșitul unuia dintre nume de fișiere.

  Cum se instalează Electrum pe Linux

Comanda noastră de redenumire folosește metacaracterul de început al liniei (^) înainte de termenul de căutare „parametru”. Aceasta îi spune redenumirii să considere că termenul de căutare a fost găsit numai dacă este la începutul numelui fișierului. Șirul de căutare „parametru” va fi ignorat dacă se află în altă parte în numele fișierului.

Verificând cu ls, putem observa că numele de fișier care avea „parametru” la sfârșitul numelui de fișier nu a fost modificat, dar cele trei nume de fișiere care aveau „parametru” la începutul numelor au avut șirul de căutare înlocuit cu înlocuitorul termenul „valoare”.

Puterea redenumirii constă în puterea lui Perl. Toate din puterea lui Perl va sta la dispozitie.

Căutare cu grupări

rename are încă mai multe trucuri în mânecă. Să luăm în considerare cazul în care ați putea avea fișiere cu șiruri similare în numele lor. Nu sunt exact aceleași șiruri, așa că o simplă căutare și înlocuire nu va funcționa aici.

În acest exemplu, folosim ls pentru a verifica ce fișiere avem care încep cu „str”. Sunt două dintre ele, string.c și strangle.c. Putem redenumi ambele șiruri simultan folosind o tehnică numită grupare.

Expresia centrală a acestei comenzi de redenumire va căuta șiruri în numele fișierelor care au secvența de caractere „stri” sau „stra”, unde acele secvențe sunt imediat urmate de „ng”. Cu alte cuvinte, termenul nostru de căutare va căuta „string” și „strang”. Termenul de substituție este „bang”.

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.c

Folosirea ls a doua oară confirmă faptul că string.c a devenit bang.c și strangle.c este acum bangle.c.

Utilizarea traducerilor cu redenumire

Comanda de redenumire poate efectua acțiuni asupra numelor de fișiere numite traduceri. Un exemplu simplu de traducere ar fi forțarea unui set de nume de fișiere în majuscule.

În comanda de redenumire de mai jos, observați că nu folosim un s/ pentru a porni expresia centrală, folosim y/. Acest lucru indică redenumirea că nu efectuăm o înlocuire; facem o traducere.

Termenul az este o expresie Perl care înseamnă toate caracterele minuscule din secvența de la a la z. În mod similar, termenul AZ reprezintă toate literele mari din secvența de la A la Z.

Expresia centrală din această comandă ar putea fi parafrazată ca „dacă oricare dintre literele mici de la a la z se găsesc în numele fișierului, înlocuiți-le cu caracterele corespunzătoare din secvența de caractere majuscule de la A la Z”.

Pentru a forța numele fișierelor tuturor fișierelor „.prg” să fie scrise cu majuscule, utilizați această comandă:

redenumiți „y/az/AZ/” *.prg

ls *.PRG

Comanda ls ne arată că toate numele de fișiere „.prg” sunt acum în majuscule. De fapt, pentru a fi strict exact, nu mai sunt fișiere „.prg”. Sunt fișiere „.PRG”. Linux este sensibil la majuscule.

Putem inversa ultima comandă inversând poziția termenilor az și AZ în expresia centrală.

redenumiți „y/AZ/az/” *.PRG

ls *.prg

Nu înveți Perl în cinci minute

A face față cu Perl este timp bine petrecut. Dar pentru a începe să utilizați capabilitățile de economisire a timpului ale comenzii rename, nu trebuie să aveți deloc multe cunoștințe Perl pentru a obține mari beneficii în putere, simplitate și timp.