Cum să utilizați comanda de redenumire pe Linux

Explorați eficiența redenumirii fișierelor în sistemul Linux, eliberându-vă de constrângerile comenzii `mv`. Această metodă oferă flexibilitate, rapiditate și, în anumite situații, o manevrare simplificată. Urmați acest ghid pentru a deprinde utilizarea eficientă a acestei comenzi.

De ce nu este suficientă comanda `mv`?

Comanda `mv` își îndeplinește funcția de bază cu succes. Aceasta este o unealtă fiabilă, prezentă în toate distribuțiile Linux, macOS și alte sisteme de operare similare Unix. Cu toate acestea, uneori avem nevoie de un instrument mai eficient, comparativ cu o simplă lopată.

Scopul principal al comenzii `mv` este de a muta fișiere. Un efect secundar benefic este capacitatea sa de a transfera un fișier existent într-unul nou, cu un nume modificat. Practic, aceasta realizează redenumirea, obținând rezultatul dorit. Cu toate acestea, `mv` nu este un instrument specializat în redenumirea fișierelor.

Redenumirea unui singur fișier cu `mv`

Pentru a folosi `mv` în redenumirea unui fișier, introduceți comanda, urmată de numele fișierului actual, apoi noul nume dorit. Confirmați prin apăsarea tastei Enter.

Puteți verifica modificările folosind comanda `ls`.

mv vechiulfisier.txt noulfisier.txt
ls *.txt

Redenumirea mai multor fișiere cu `mv`

Procesul se complică atunci când doriți să redenumiti mai multe fișiere simultan. `mv` nu este proiectat pentru redenumiri în masă. Aceasta necesită utilizarea unor artificii Bash, care pot fi complicate pentru cei mai puțin familiarizați cu linia de comandă. Complexitatea redenumirii multiple prin `mv` contrastează cu simplitatea redenumirii unui singur fișier.

Complexitatea crește rapid.

Imaginați-vă că aveți un director cu diverse tipuri de fișiere, unele având extensia „.prog”. Intenția este de a le redenumi în linie de comandă, folosind extensia „.prg”.

Cum putem face `mv` să realizeze acest lucru? Să examinăm fișierele inițial.

ls *.prog -l

Iată o metodă pentru a realiza această operațiune, evitând crearea unui script Bash complicat.

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

Operația a avut succes? Verificăm fișierele pentru a vedea.

ls *.pr*

Așa este, toate fișierele au fost redenumite cu extensia „.prg”, iar fișierele cu extensia „.prog” au dispărut.

Care este mecanismul acestei comenzi?

Ce a făcut această comandă extinsă? Să o analizăm pas cu pas.

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

Prima secțiune inițiază o buclă care va procesa individual fiecare fișier cu extensia „.prog” din director.

Partea următoare definește acțiunea de procesare. Folosește `mv` pentru a muta fiecare fișier într-un nou fișier, cu numele original, dar fără extensia „.prog”, care este înlocuită cu „.prg”.

Există o metodă mai simplă?

Absolut. Este vorba despre comanda `rename`.

Comanda `rename` nu este inclusă implicit în distribuțiile Linux, deci trebuie instalată. Numele acesteia poate varia între diversele sisteme Linux, dar funcționalitatea rămâne constantă. Va trebui să adaptați numele comenzii în funcție de distribuția Linux pe care o utilizați.

Pentru sistemele Ubuntu și derivate Debian, instalați `rename` astfel:

sudo apt-get install rename

Pentru distribuțiile Fedora și RedHat, instalați `prename`, reținând prefixul „p”, care indică utilizarea Perl.

sudo dnf install prename

Pentru a instala în Manjaro Linux, folosiți următoarea comandă. Observați că comanda este denumită `perl-rename`.

sudo pacman -Syu perl-rename

Repetăm operația cu `rename`

De această dată vom folosi comanda `rename`. Vom restabili fișierele la extensia „.prog”.

ls *.prog

Acum, folosim următoarea comandă pentru redenumire. Verificăm rezultatul cu `ls`. Adaptați comanda `rename` cu cea corespunzătoare distribuției Linux, dacă nu utilizați Ubuntu sau un derivat Debian.

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

Operația a avut succes, toate fișierele sunt „.prg”, iar cele „.prog” au fost eliminate.

Cum funcționează această comandă?

Să explicăm funcționarea acestei comenzi, împărțind-o în trei părți.

Prima parte este numele comenzii, `rename` (sau `prename` sau `perl-rename`, pentru distribuțiile corespunzătoare).

Ultima parte este `*.prog`, care specifică comenzii `rename` să acționeze asupra tuturor fișierelor „.prog”.

Partea centrală definește operațiunea de redenumire. `s` înseamnă înlocuire. Prima parte (`.prog`) este ce caută comanda în fiecare nume de fișier, iar a doua parte (`.prg`) este termenul cu care va fi înlocuită.

Expresia centrală este o expresie regulată Perl, care conferă flexibilitate comenzii `rename`.

Modificarea altor componente ale numelor de fișiere

Până acum, am modificat extensiile fișierelor, dar putem edita și alte părți ale numelor.

În director există mai multe fișiere de cod sursă C. Toate au prefixul „slang_”. Putem verifica acest lucru cu comanda `ls`.

ls sl*.c

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

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

Căutăm fișierele „.c” și termenul „slang_”. Acesta este înlocuit cu „sl_” în fiecare nume de fișier în care este găsit.

Verificăm rezultatul repetând comanda `ls` cu aceiași parametri:

ls sl*.c

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

Putem elimina o porțiune dintr-un nume de fișier, înlocuind termenul de căutare cu un șir gol.

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

Din rezultatele comenzii `ls`, vedem că fișierele „.c” au prefixul „sl_”. Să eliminăm acest prefix.

Comanda `rename` păstrează același format. Căutăm fișiere „.c”. Termenul de căutare este „sl_”, iar termenul de înlocuire este un șir gol, reprezentat de două bare oblice inverse.

Comanda `rename` procesează fiecare fișier „.c”, caută „sl_” și îl șterge din numele fișierului.

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

Restricționarea modificărilor la anumite părți ale numelor de fișiere

Folosim `ls` pentru a identifica fișierele care conțin șirul „param” în nume. Apoi folosim `rename` pentru a înlocui „param” cu „parametru”. Verificăm cu `ls` impactul comenzii `rename` asupra fișierelor.

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

Au fost găsite patru fișiere care conțin „param”. `param.c`, `param_one.c` și `param_two.c` au „param” la început, în timp ce `third_param.c` are „param” la sfârșit.

Comanda `rename` va înlocui „param” cu „parametru” în orice poziție a numelui de fișier.

A doua utilizare a comenzii `ls` arată că înlocuirea a avut loc corect. Poziția inițială a lui „param” nu a contat.

Putem folosi metacaractere Perl pentru a ajusta comportamentul expresiei. Metacaracterele sunt simboluri care reprezintă poziții sau secvențe. De exemplu, `^` semnifică „începutul unui șir”, `$` semnifică „sfârșitul unui șir”, iar `.` reprezintă orice caracter unic, cu excepția unui newline.

Utilizăm metacaracterul de început de șir `^` pentru a limita căutarea la începutul numelor de fișiere.

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

Fișierele redenumite anterior sunt listate. „parameter” se află la începutul a trei nume de fișiere și la sfârșitul unuia.

Comanda `rename` include metacaracterul de început de linie (`^`) înaintea termenului de căutare „parameter”. Aceasta indică comenzii `rename` să considere termenul găsit doar la începutul numelui fișierului. Șirul „parameter” este ignorat dacă se află în altă parte.

Verificând cu `ls`, observăm că fișierul cu „parameter” la sfârșit nu a fost modificat, în timp ce fișierele care aveau „parameter” la început, au fost modificate, înlocuind cuvântul cu „value”.

Puterea comenzii `rename` derivă din puterea limbajului Perl. Întreaga putere Perl este acum la dispoziția dvs.

Căutarea cu grupări

Comanda `rename` are și alte avantaje. Considerați situația în care fișierele ar putea avea șiruri similare, dar nu identice în nume. O simplă căutare și înlocuire nu ar funcționa.

În acest exemplu, folosim `ls` pentru a verifica fișierele care încep cu „str”. Sunt două, `string.c` și `strangle.c`. Le putem redenumi simultan, folosind o metodă de grupare.

Expresia centrală va căuta șiruri cu secvențele „stri” sau „stra”, urmate imediat de „ng”. Căutarea se va concentra pe „string” și „strang”, iar termenul de înlocuire este „bang”.

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

A doua comandă `ls` confirmă că `string.c` a devenit `bang.c`, iar `strangle.c` a devenit `bangle.c`.

Utilizarea traducerilor cu `rename`

Comanda `rename` poate aplica acțiuni asupra numelor fișierelor numite traduceri. Un exemplu simplu este transformarea tuturor numelor de fișiere în majuscule.

În comanda de mai jos, observăm utilizarea `y/` în loc de `s/` în expresia centrală. Aceasta indică faptul că `rename` nu efectuează o înlocuire, ci o traducere.

Termenul `az` reprezintă caracterele minuscule din secvența de la `a` la `z`. Similar, termenul `AZ` reprezintă caracterele majuscule din secvența `A` la `Z`.

Expresia centrală poate fi interpretată ca: „dacă orice caracter minuscul de la a la z este prezent în numele fișierului, înlocuiți-l cu caracterul corespunzător din secvența majusculă de la A la Z”.

Pentru a converti toate numele fișierelor „.prg” în majuscule, folosiți această comandă:

rename ‘y/az/AZ/’ *.prg

ls *.PRG

Comanda `ls` arată că toate numele de fișiere „.prg” sunt acum în majuscule. Mai precis, nu mai sunt fișiere „.prg”, ci „.PRG”. Linux este sensibil la majuscule.

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

rename ‘y/AZ/az/’ *.PRG

ls *.prg

Nu înveți Perl în cinci minute

Stăpânirea limbajului Perl necesită timp. Totuși, chiar și cunoștințe limitate ale limbajului Perl vă permit să beneficiați de capabilitățile de economisire a timpului oferite de comanda `rename`, îmbunătățindu-vă eficiența, simplitatea și viteza de lucru.