Sådan bruges omdøbe kommandoen på Linux

Kom godt ind i filen, der omdøber kraftværket i Linux-verdenen, og giv mv- og dig selv - en pause. Renameer fleksibel, hurtig og nogle gange endnu lettere. Her er en tutorial til dette kraftværk af en kommando.

Hvad er galt med mv?

Der er ikke noget galt med mv. Kommandoen fungerer fint, og den findes på alle Linux-distributioner, i macOS og i andre Unix-lignende operativsystemer. Så det er altid tilgængeligt. Men nogle gange har du bare brug for en bulldozer, ikke en skovl.

Den mvkommando har et formål i livet, og det er at flytte filer. Det er en glad bivirkning, at den kan bruges til at flytte en eksisterende fil til en ny fil med et nyt navn. Nettovirkningen er at omdøbe filen, så vi får det, vi ønsker. Men mver ikke et dedikeret værktøj til omdøbning af filer.

Omdøbning af en enkelt fil med mv

Bruges mvtil at omdøbe en filtype mv, et mellemrum, navnet på filen, et mellemrum og det nye navn, du ønsker, at filen skal have. Tryk derefter på Enter.

Du kan bruge  lstil at kontrollere, at filen er blevet omdøbt.

mv oldfile.txt newfile.txt
ls * .txt

Omdøbning af flere filer med mv

Ting bliver sværere, når du vil omdøbe flere filer. mvhar ingen mulighed for at håndtere omdøbning af flere filer. Du skal ty til at bruge nogle smarte Bash-tricks. Det er fint, hvis du kender en kommandolinjefu af mellemklasse, men kompleksiteten ved at omdøbe flere filer med mvstår i skarp kontrast til den lette brug af mvat omdøbe en enkelt fil.

Ting eskalerer hurtigt.

Lad os sige, at vi har en mappe med en række filer i den, af forskellige typer. Nogle af disse filer har filtypenavnet ".prog". Vi vil omdøbe dem på kommandolinjen, så de har en ".prg" udvidelse.

Hvordan kæmper vi for at mvgøre det for os? Lad os se på filerne.

ls * .prog -l

Her er en måde at gøre det på, der ikke ty til at skrive en egentlig Bash-scriptfil.

for f i * .prog; gør mv - "$ f" "$ {f% .prog} .prg"

Fandt det arbejde? Lad os kontrollere filerne og se.

ls * .pr *

Så ja, det fungerede. De er alle ".prg" filer nu, og der er ingen ".prog" filer i biblioteket.

Hvad skete der lige?

Hvad gjorde den lange kommando egentlig? Lad os nedbryde det.

for f i * .prog; gør mv - "$ f" "$ {f% .prog} .prg"

Den første del starter en sløjfe, der skal behandle hver “.prog” -fil i biblioteket igen.

Den næste del siger, hvad behandlingen vil gøre . Det bruger  mvtil at flytte hver fil til en ny fil. Den nye fil vil blive navngivet med den originale fils navn undtagen “.prog” -delen. En ny udvidelse af “.prg” bruges i stedet.

Der skal være en enklere måde

Helt sikkert. Det er renamekommandoen.

renameer ikke en del af en standard Linux-distribution, så du bliver nødt til at installere den. Det har også et andet navn i forskellige familier af Linux, men de fungerer alle på samme måde. Du bliver bare nødt til at erstatte det relevante kommandonavn i henhold til den Linux-smag, du bruger.

i Ubuntu- og Debian-afledte distributioner installerer du renamesådan:

sudo apt-get install omdøb

I Fedora- og RedHat-afledte distributioner installerer du prenamesådan. Bemærk det oprindelige "p", som står for Perl.

sudo dnf installere fornavn

Brug følgende kommando til at installere det i Manjaro Linux. Bemærk, at omdøbningskommandoen kaldes perl-rename.

sudo pacman -Syu perl-omdøb

Lad os gøre det igen

Og denne gang bruger vi rename. Vi ruller uret tilbage, så vi har et sæt ".prog" -filer.

ls * .prog

Lad os nu bruge følgende kommando til at omdøbe dem. Vi undersøger derefter, lsom det fungerede. Husk at erstatte renamedet korrekte kommandonavn til din Linux, hvis du ikke bruger Ubuntu eller et Linux-afledt af Debian.

omdøb 's / .prog / .prg /' * .prog
ls * .pr *

Det fungerede, de er nu alle ".prg" filer, og der er ingen ".prog" filer tilbage i biblioteket.

Hvad skete der med denne tid?

Lad os forklare den smule magi i tre dele.

Den første del er kommandonavnet rename(eller prenameeller perl-renamefor de andre distributioner).

Den sidste del er *.prog, som fortæller renameat betjene alle “.prog” filer.

Den midterste del definerer det arbejde, vi vil udføre på hvert filnavn. Den smidler stedfortræder. Den første term ( .prog) er, hvad der renameskal søges efter i hvert filnavn, og den anden term ( .prg) er, hvad den skal erstattes med.

Den midterste del af kommandoen eller det centrale udtryk er et Perl 'regulært udtryk', og det er det, der giver renamekommandoen sin fleksibilitet.

Ændring af andre dele af et filnavn

Vi har ændret filnavnudvidelser indtil videre, lad os ændre andre dele af filnavne.

I biblioteket er der mange C-kildekodefiler. Alle filnavne er forud for "slang_". Vi kan kontrollere dette med ls.

ls sl * .c

Vi skal erstatte alle forekomster af “slang_” med “sl_”. Formatet på kommandoen er allerede kendt for os. Vi ændrer bare søgeudtrykket, erstatningstiden og filtypen.

omdøb 's / slang_ / sl_' *. c

Denne gang leder vi efter “.c” filer og søger efter “slang_”. Når "slang_" findes i et filnavn, erstattes det med "sl_".

Vi kan kontrollere resultatet af denne kommando ved at gentage lskommandoen ovenfra med de samme parametre:

ls sl * .c

Sletning af en del af et filnavn

Vi kan fjerne en del af et filnavn ved at erstatte søgeudtrykket med intet.

ls * .c
omdøbe s / sl _ // '* .c
ls * .c

Vi kan se fra lskommandoen, at vores “.c” -filer alle er præpenderet med “sl_”. Lad os slippe af med det helt.

Den renamekommando følger samme format som før. Vi vil lede efter “.c” filer. Søgeudtrykket er “sl_”, men der er ingen erstatningsudtryk. To tilbageslag uden noget mellem dem betyder intet, en tom streng.

renamebehandler hver “.c” -fil igen. Det søger efter “sl_” i filnavnet. Hvis den findes, erstattes den af ​​intet. Med andre ord slettes søgeudtrykket.

Den anden brug af lskommandoen bekræfter, at “sl_” præfikset er blevet fjernet fra hver “.c” fil.

Begræns ændringer til specifikke dele af filnavne

Lad os bruge ls til at se på filer, der har strengen "param" i deres filnavn. Derefter bruger vi renametil at erstatte den streng med strengen "parameter". Vi bruger lsendnu en gang til at se, hvilken effekt renamekommandoen har haft på disse filer.

ls * param *
omdøb 's / param / parameter' *. c
ls * param *

Fire filer findes, der har "param" i deres filnavn. param.c, param_one.c og param_two.c har alle "param" i starten af deres navn. third_param.c har "param" i slutningen af sit navn lige før udvidelsen.

Den renamekommando vil søge efter ”param” overalt i filnavnet, og erstatte det med ”parameteren” i alle tilfælde.

Den anden brug af  lskommandoen viser os, at det er præcis, hvad der er sket. Uanset om "param" var i starten eller i slutningen af ​​filnavnet, er det blevet erstattet af "parameter."

Vi kan bruge Perls metategn til at forfine opførelsen af ​​det midterste udtryk. Metategn er symboler, der repræsenterer positioner eller sekvenser af tegn. For eksempel ^betyder "start af en streng", $betyder "slutning af en streng" og .betyder ethvert enkelt tegn (bortset fra et nyt linjetegn).

Vi bruger starten på strengmetakarakter ( ^) for at begrænse vores søgning til starten af ​​filnavne.

ls * param * .c
omdøb 's / ^ parameter / værdi /' *. c
ls * param * .c
ls værdi * .c

De filer, vi tidligere omdøbte, vises, og vi kan se, at strengen "parameter" er i starten af ​​tre filnavne, og den er i slutningen af ​​et af filnavne.

Vores renamekommando bruger starten af ​​linjen  (^) metakarakter inden søgeudtrykket "parameter". Dette fortæller renameat kun overveje at søgeudtrykket er fundet, hvis det er i starten af ​​filnavnet. Søgestrengen "parameter" ignoreres, hvis den er et andet sted i filnavnet.

Ved at kontrollere med lskan vi se, at filnavnet, der havde "parameter" i slutningen af filnavnet, ikke er blevet ændret, men de tre filnavne, der havde "parameter" i starten af deres navne, har fået søgestrengen erstattet af erstatningsudtrykket "værdi."

Kraften ved renameligger i Perls kraft. Al kraften i Perl er til din rådighed.

Søgning med grupperinger

renamehar endnu flere tricks i ærmet. Lad os overveje det tilfælde, hvor du måske har filer med lignende strenge i deres navne. De er ikke nøjagtigt de samme strenge, så en simpel søgning og erstatning fungerer ikke her.

I dette eksempel bruger vi ls til at kontrollere, hvilke filer vi har, der starter med “str”. Der er to af dem, string.c og strangle.c. Vi kan omdøbe begge strenge på én gang ved hjælp af en teknik kaldet gruppering.

Det centrale udtryk for denne renamekommando vil søge efter strenge inden for filnavne, der har tegnsekvensen "stri" eller "stra", hvor disse sekvenser straks efterfølges af "ng". Med andre ord vil vores søgeudtryk søge efter "streng" og "fremmed". Erstatningsudtrykket er "bang".

ls str * .c
omdøb 's / (stri | stra) ng / bang /' * .c
Det er forbud * .c

Brug af  ls en anden gang bekræfter, at string.c er blevet bang.c og strangle.c er nu bangle.c.

Brug af oversættelser med omdøb

Den renamekommando kan udføre handlinger på filnavne kaldet oversættelser. Et simpelt eksempel på en oversættelse ville være at tvinge et sæt filnavne til store bogstaver.

I renamekommandoen nedenfor bemærkes, at vi ikke bruger en s/ til at starte det centrale udtryk, vi bruger y/. Dette fortæller, at  renamevi ikke udfører en udskiftning; vi udfører en oversættelse.

Den a-z Udtrykket er en Perl udtryk, der betyder små bogstaver i sekvensen fra a til z. Tilsvarende A-Z repræsenterer udtrykket alle store bogstaver i sekvensen fra A til Z.

Det centrale udtryk i denne kommando kan omskrives som "hvis nogen af ​​de små bogstaver fra a til z findes i filnavnet, skal du erstatte dem med de tilsvarende tegn fra sekvensen med store bogstaver fra A til Z."

For at tvinge filnavnene på alle ".prg" -filer til store bogstaver skal du bruge denne kommando:

omdøb 'y / az / AZ /' * .prg

ls * .PRG

De lsKommandoen viser os, at alle ”.prg” filnavne er nu i store bogstaver. For at være strengt nøjagtige er de faktisk ikke ".prg" -filer længere. De er ".PRG" filer. Linux er store og små bogstaver.

Vi kan vende den sidste kommando ved at vende placeringen af a-zog A-Z termerne i det centrale udtryk.

omdøb 'y / AZ / az /' * .PRG

ls * .prg

Du (Wo | Do) lærer ikke Perl på fem minutter

At få fat i Perl er tid brugt. Men for at begynde at bruge de tidsbesparende funktioner i renamekommandoen behøver du slet ikke have meget Perl-viden for at høste store fordele i kraft, enkelhed og tid.