Sådan bruger du omdøbningskommandoen på Linux

Få styr på det filomdøbende kraftcenter i Linux-verdenen, og giv mv – og dig selv – en pause. Omdøb er fleksibelt, hurtigt og nogle gange endda nemmere. Her er en tutorial til dette kraftcenter af en kommando.

Hvad er der galt med mv?

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

Kommandoen mv har et formål i livet, og det er at flytte filer. Det er en glædelig bivirkning, at den kan bruges til at flytte en eksisterende fil til en ny fil, med et nyt navn. Nettoeffekten er at omdøbe filen, så vi får, hvad vi vil have. Men mv er ikke et dedikeret filomdøbningsværktøj.

Omdøbning af en enkelt fil med mv

For at bruge mv til at omdøbe en fil, skriv 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 ls til at kontrollere, at filen er blevet omdøbt.

mv oldfile.txt newfile.txt
ls *.txt

Omdøbning af flere filer med mv

Tingene bliver sværere, når du vil omdøbe flere filer. mv har ingen evne til 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 kommandolinje-fu af medium kvalitet, men kompleksiteten ved at omdøbe flere filer med mv står i skarp kontrast til, hvor let det er at bruge mv til at omdøbe en enkelt fil.

Tingene eskalerer hurtigt.

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

Hvordan skændes vi mv til at gøre det for os? Lad os tage et kig på filerne.

ls *.prog -l

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

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

for f i *.prog;  gør mv --

virkede det? Lad os tjekke filerne og se.

ls *.pr*

Så ja, det virkede. De er alle “.prg”-filer nu, og der er ingen “.prog”-filer i mappen.

  Sådan tilføjes og skiftes brugere i Windows-undersystem til Linux

Hvad skete der lige?

Hvad gjorde den lange kommando egentlig? Lad os bryde det ned.

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

Den første del starter en løkke, der på skift skal behandle hver “.prog”-fil i mappen.

Den næste del siger, hvad behandlingen vil gøre. Den bruger mv til 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” vil blive brugt i stedet.

Der skal være en enklere måde

Helt sikkert. Det er kommandoen omdøb.

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

i Ubuntu og Debian-afledte distributioner installerer du omdøb på denne måde:

sudo apt-get install rename

I Fedora og RedHat-afledte distributioner installerer du fornavn som dette. Bemærk det indledende “p”, som står for Perl.

sudo dnf install prename

For at installere det i Manjaro Linux, brug følgende kommando. Bemærk, at omdøbningskommandoen kaldes perl-omdøb.

sudo pacman -Syu perl-rename

Lad os gøre det igen

Og denne gang bruger vi omdøb. Vi ruller tiden tilbage, så vi har et sæt “.prog”-filer.

ls *.prog

Lad os nu bruge følgende kommando til at omdøbe dem. Vi vil så tjekke med ls, om det virkede. Husk at erstatte omdøb med det passende kommandonavn til din Linux, hvis du ikke bruger Ubuntu eller en Debian-afledt Linux.

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

Det virkede, de er nu alle “.prg”-filer, og der er ingen “.prog”-filer tilbage i mappen.

Hvad skete der denne gang?

Lad os forklare den smule magi i tre dele.

Den første del er kommandoen navn, omdøb (eller fornavn eller perl-omdøb , for de andre distributioner).

Den sidste del er *.prog, som fortæller omdøb at fungere på alle “.prog” filer.

Den midterste del definerer det arbejde, vi ønsker at blive udført på hvert filnavn. S’et betyder erstatning. Det første led (.prog) er det omdøb vil søge efter i hvert filnavn, og det andet led (.prg) er hvad det vil blive erstattet med.

Den midterste del af kommandoen, eller det centrale udtryk, er en Perl ‘almindelig udtryk‘ og det er det, der giver kommandoen omdøb dens fleksibilitet.

Ændring af andre dele af et filnavn

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

  Sådan vendes Tether fra Linux til Android med Gnirehtet

I mappen er der en masse C-kildekodefiler. Alle filnavne er foranstillet med “slang_”. Vi kan tjekke dette med ls.

ls sl*.c

Vi vil erstatte alle forekomster af “slang_” med “sl_”. Formatet af kommandoen er allerede bekendt for os. Vi ændrer blot søgeudtrykket, erstatningsudtrykket og filtypen.

rename '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 ls-kommandoen fra oven 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øgeordet med ingenting.

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

Vi kan se fra ls-kommandoen, at vores “.c”-filer alle er sat foran med “sl_”. Lad os slippe helt af med det.

Omdøb-kommandoen følger samme format som før. Vi skal lede efter “.c”-filer. Søgeudtrykket er “sl_”, men der er ingen substitutionsterm. To omvendte skråstreg uden noget imellem dem betyder ingenting, en tom streng.

rename vil behandle hver “.c”-fil efter tur. Det vil søge efter “sl_” i filnavnet. Hvis det bliver fundet, vil det blive erstattet af ingenting. Med andre ord slettes søgeordet.

Den anden brug af ls-kommandoen 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. Så bruger vi omdøb til at erstatte den streng med strengen “parameter”. Vi bruger ls endnu en gang for at se, hvilken effekt kommandoen omdøb har haft på disse filer.

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

Der findes fire filer, 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.

Omdøb-kommandoen vil søge efter “param” overalt i filnavnet og erstatte det med “parameter” i alle tilfælde.

Den anden brug af ls-kommandoen 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 metakarakterer til at forfine opførselen af ​​det midterste udtryk. Metategn er symboler, der repræsenterer positioner eller sekvenser af tegn. For eksempel betyder ^ “start på en streng”, $ betyder “slut på en streng” og . betyder ethvert enkelt tegn (bortset fra et linjeskifttegn).

Vi kommer til at bruge starten af ​​strengens metategn ( ^ ) for at begrænse vores søgning til starten af ​​filnavnene.

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

De filer, vi omdøbte tidligere, er listet, og vi kan se strengen “parameter” er i starten af ​​tre filnavne, og den er i slutningen af ​​et af filnavnene.

  Sådan optager du Screencast GIF'er på Linux

Vores omdøb-kommando bruger starten af ​​linjen (^) metategn før søgetermen “parameter.” Dette fortæller omdøb kun at betragte søgetermen som værende fundet, hvis den er i starten af ​​filnavnet. Søgestrengen “parameter” vil blive ignoreret, hvis den er et andet sted i filnavnet.

Ved at tjekke med ls kan 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 erstatningen begrebet “værdi”.

Kraften til at omdøbe ligger i Perls kraft. Alle kraft af Perl er til din rådighed.

Søgning med grupperinger

rename har 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 helt de samme strenge, så en simpel søgning og substitution virker 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 omdøb-kommando vil søge efter strenge i filnavne, der har tegnsekvensen “stri” eller “stra”, hvor disse sekvenser umiddelbart efterfølges af “ng”. Med andre ord vil vores søgeterm lede efter “streng” og “strang”. Substitutionsbegrebet er “bang”.

ls str*.c
rename 's/(stri|stra)ng/bang/' *.c
ls ban*.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

Kommandoen omdøb 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.

Bemærk i omdøb-kommandoen nedenfor, at vi ikke bruger en s/ til at starte det centrale udtryk, vi bruger y/. Dette fortæller omdøb, at vi ikke udfører en erstatning; vi udfører en oversættelse.

az-udtrykket er et Perl-udtryk, der betyder alle små bogstaver i sekvensen fra a til z. På samme måde repræsenterer AZ-udtrykket alle store bogstaver i rækkefølgen 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 af ​​store bogstaver fra A til Z.”

For at tvinge filnavnene på alle “.prg”-filer til store bogstaver, brug denne kommando:

omdøb ‘y/az/AZ/’ *.prg

ls *.PRG

Kommandoen ls viser os, at alle “.prg” filnavne nu er med store bogstaver. Faktisk, for at være strengt nøjagtige, er de ikke længere “.prg”-filer. De er “.PRG” filer. Linux skelner mellem store og små bogstaver.

Vi kan vende den sidste kommando ved at vende positionen af ​​az- og AZ-leddene i det centrale udtryk.

omdøb ‘y/AZ/az/’ *.PRG

ls *.prg

Du (Wo|Do)n’t Learn Perl på fem minutter

At få styr på Perl er tid givet godt ud. Men for at begynde at bruge de tidsbesparende muligheder for omdøb-kommandoen, behøver du slet ikke have meget Perl-viden for at høste store fordele i kraft, enkelhed og tid.