Hvordan bruke rename Command på Linux

Ta tak i filomdøpingens kraftsenter i Linux-verdenen og gi mv – og deg selv – en pause. Gi nytt navn er fleksibelt, raskt og noen ganger enda enklere. Her er en veiledning til denne kraftpakken til en kommando.

Hva er galt med mv?

Det er ikke noe galt med mv. Kommandoen gjør det en fin jobb, og den finnes på alle Linux-distribusjoner, i macOS og i andre Unix-lignende operativsystemer. Så det er alltid tilgjengelig. Men noen ganger trenger du bare en bulldoser, ikke en spade.

Mv-kommandoen har en hensikt i livet, og det er å flytte filer. Det er en gledelig bivirkning at den kan brukes til å flytte en eksisterende fil til en ny fil, med et nytt navn. Nettoeffekten er å gi nytt navn til filen, slik at vi får det vi ønsker. Men mv er ikke et dedikert verktøy for å endre navn på filer.

Gi nytt navn til en enkelt fil med mv

For å bruke mv til å gi nytt navn til en fil, skriv inn mv, et mellomrom, navnet på filen, et mellomrom og det nye navnet du ønsker at filen skal ha. Trykk deretter Enter.

Du kan bruke ls for å sjekke at filen har fått nytt navn.

mv oldfile.txt newfile.txt
ls *.txt

Gi nytt navn til flere filer med mv

Ting blir vanskeligere når du vil endre navn på flere filer. mv har ingen evne til å håndtere å gi nytt navn til flere filer. Du må ty til å bruke noen smarte Bash-triks. Det er greit hvis du kjenner en kommandolinjefu av middels klasse, men kompleksiteten ved å gi nytt navn til flere filer med mv står i sterk kontrast til hvor enkelt det er å bruke mv til å gi nytt navn til en enkelt fil.

Ting eskalerer raskt.

La oss si at vi har en katalog med en rekke filer i den, av forskjellige typer. Noen av disse filene har filtypen «.prog». Vi ønsker å gi dem nytt navn på kommandolinjen slik at de har en «.prg»-utvidelse.

Hvordan krangler vi mv til å gjøre det for oss? La oss ta en titt på filene.

ls *.prog -l

Her er en måte å gjøre det på som ikke tyr til å skrive en faktisk Bash-skriptfil.

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

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

fungerte det? La oss sjekke filene og se.

ls *.pr*

Så ja, det fungerte. De er alle «.prg»-filer nå, og det er ingen «.prog»-filer i katalogen.

  Hvordan bestemme gjeldende brukerkonto i Linux

Hva skjedde nå?

Hva gjorde egentlig den lange kommandoen? La oss bryte det ned.

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

Den første delen starter en sløyfe som skal behandle hver «.prog»-fil i katalogen etter tur.

Den neste delen sier hva behandlingen vil gjøre. Den bruker mv for å flytte hver fil til en ny fil. Den nye filen vil bli navngitt med den opprinnelige filens navn unntatt «.prog»-delen. En ny utvidelse av «.prg» vil bli brukt i stedet.

Det må finnes en enklere måte

Mest sannsynlig. Det er kommandoen endre navn.

rename er ikke en del av en standard Linux-distribusjon, så du må installere den. Den har også et annet navn i forskjellige Linux-familier, men de fungerer alle på samme måte. Du må bare erstatte det riktige kommandonavnet i henhold til Linux-smaken du bruker.

i Ubuntu og Debian-avledede distribusjoner installerer du omdøp slik:

sudo apt-get install rename

I Fedora og RedHat-avledede distribusjoner installerer du fornavn som dette. Legg merke til den innledende «p», som står for Perl.

sudo dnf install prename

For å installere det i Manjaro Linux bruk følgende kommando. Merk at kommandoen for å gi nytt navn kalles perl-rename.

sudo pacman -Syu perl-rename

La oss gjøre det igjen

Og denne gangen bruker vi endre navn. Vi ruller tilbake klokken slik at vi har et sett med «.prog»-filer.

ls *.prog

La oss nå bruke følgende kommando for å gi dem nytt navn. Vi vil da sjekke med ls om det fungerte. Husk å erstatte rename med riktig kommandonavn for din Linux hvis du ikke bruker Ubuntu eller en Debian-avledet Linux.

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

Det fungerte, de er nå alle «.prg»-filer, og det er ingen «.prog»-filer igjen i katalogen.

Hva skjedde denne gangen?

La oss forklare den biten magi, i tre deler.

Den første delen er kommandoen navn, rename (eller prename eller perl-rename , for de andre distribusjonene).

Den siste delen er *.prog, som forteller at rename skal fungere på alle «.prog»-filer.

Den midtre delen definerer arbeidet vi ønsker skal gjøres på hvert filnavn. s betyr erstatning. Det første begrepet (.prog) er det et nytt navn vil søke etter i hvert filnavn, og det andre begrepet (.prg) er det det vil bli erstattet med.

Den midtre delen av kommandoen, eller det sentrale uttrykket, er en Perl «vanlig uttrykk« og det er det som gir rename-kommandoen sin fleksibilitet.

  Hvordan spille PlanetSide 2 på Linux

Endre andre deler av et filnavn

Vi har endret filnavn så langt, la oss endre andre deler av filnavnene.

I katalogen er det mange C-kildekodefiler. Alle filnavnene er prefikset med «slang_». Vi kan sjekke dette med ls.

ls sl*.c

Vi kommer til å erstatte alle forekomster av «slang_» med «sl_». Formatet på kommandoen er allerede kjent for oss. Vi endrer bare søkeordet, erstatningsbegrepet og filtypen.

rename 's/slang_/sl_' *.c

Denne gangen leter vi etter «.c»-filer, og søker etter «slang_». Når «slang_» er funnet i et filnavn, erstattes det med «sl_».

Vi kan sjekke resultatet av den kommandoen ved å gjenta ls-kommandoen ovenfra med de samme parameterne:

ls sl*.c

Sletting av en del av et filnavn

Vi kan fjerne en del av et filnavn ved å erstatte søkeordet med ingenting.

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

Vi kan se fra ls-kommandoen at «.c»-filene våre er satt foran «sl_». La oss bli kvitt det helt.

Rename-kommandoen følger samme format som før. Vi skal lete etter «.c»-filer. Søkeordet er «sl_», men det er ingen erstatningsterm. To skråstreker uten noe mellom dem betyr ingenting, en tom streng.

rename vil behandle hver «.c»-fil etter tur. Den vil søke etter «sl_» i filnavnet. Hvis den blir funnet, erstattes den av ingenting. Med andre ord blir søkeordet slettet.

Den andre bruken av ls-kommandoen bekrefter at «sl_»-prefikset er fjernet fra hver «.c»-fil.

Begrens endringer til spesifikke deler av filnavn

La oss bruke ls til å se på filer som har strengen «param» i filnavnet. Deretter bruker vi rename for å erstatte den strengen med strengen «parameter». Vi bruker ls en gang til for å se effekten rename-kommandoen har hatt på disse filene.

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

Fire filer er funnet som har «param» i filnavnet. param.c, param_one.c og param_two.c har alle «param» i starten av navnet. third_param.c har «param» på slutten av navnet, like før utvidelsen.

Rename-kommandoen skal søke etter «param» overalt i filnavnet, og erstatte den med «parameter» i alle tilfeller.

Den andre bruken av ls-kommandoen viser oss at det er akkurat det som har skjedd. Enten «param» var i starten eller på slutten av filnavnet, har det blitt erstattet med «parameter.»

Vi kan bruke Perls metategn for å avgrense oppførselen til det midterste uttrykket. Metategn er symboler som representerer posisjoner eller sekvenser av tegn. For eksempel betyr ^ «start av en streng», $ betyr «slutt på en streng» og . betyr et hvilket som helst enkelttegn (bortsett fra et linjeskifttegn).

Vi kommer til å bruke starten av strengmetategn ( ^ ) for å begrense søket vårt til starten av filnavnene.

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

Filene vi ga nytt navn tidligere er oppført, og vi kan se strengen «parameter» er i starten av tre filnavn og den er på slutten av ett av filnavnene.

  Hvordan lage en Windows 10 VM i VMware på Linux

Rename-kommandoen vår bruker starten på linjen (^) metategn før søkeordet «parameter». Dette forteller rename å kun vurdere søkeordet for å ha blitt funnet hvis det er i starten av filnavnet. Søkestrengen «parameter» vil bli ignorert hvis den er noe annet sted i filnavnet.

Ved å sjekke med ls kan vi se at filnavnet som hadde «parameter» på slutten av filnavnet ikke har blitt endret, men de tre filnavnene som hadde «parameter» i starten av navnene har fått søkestrengen erstattet av erstatningen begrepet «verdi».

Kraften til å endre navn ligger i kraften til Perl. Alle kraften til Perl står til din disposisjon.

Søke med grupperinger

rename har enda flere triks i ermet. La oss vurdere tilfellet der du kan ha filer med lignende strenger i navnene deres. De er ikke akkurat de samme strengene, så et enkelt søk og erstatning vil ikke fungere her.

I dette eksemplet bruker vi ls for å sjekke hvilke filer vi har som starter med «str». Det er to av dem, string.c og strangle.c. Vi kan gi nytt navn til begge strengene samtidig ved å bruke en teknikk som kalles gruppering.

Det sentrale uttrykket for denne rename-kommandoen vil søke etter strenger i filnavn som har tegnsekvensen «stri» eller «stra», der disse sekvensene umiddelbart etterfølges av «ng». Med andre ord, søkeordet vårt kommer til å se etter «streng» og «strang». Substitusjonsbegrepet er «bang».

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

Å bruke ls en gang til bekrefter at string.c har blitt bang.c og strangle.c er nå bangle.c.

Bruke oversettelser med endre navn

Rename-kommandoen kan utføre handlinger på filnavn kalt oversettelser. Et enkelt eksempel på en oversettelse vil være å tvinge et sett med filnavn til store bokstaver.

Legg merke til at vi ikke bruker en s/ for å starte det sentrale uttrykket i rename-kommandoen nedenfor, vi bruker y/. Dette forteller rename at vi ikke utfører en erstatning; vi utfører en oversettelse.

Az-begrepet er et Perl-uttrykk som betyr alle små bokstaver i sekvensen fra a til å. På samme måte representerer AZ-begrepet alle store bokstaver i sekvensen fra A til Å.

Det sentrale uttrykket i denne kommandoen kan omskrives som «hvis noen av de små bokstavene fra a til z finnes i filnavnet, erstatt dem med de tilsvarende tegnene fra sekvensen av store bokstaver fra A til Å.»

For å tvinge filnavnene til alle «.prg»-filer til store bokstaver, bruk denne kommandoen:

gi nytt navn til «y/az/AZ/» *.prg

ls *.PRG

ls-kommandoen viser oss at alle «.prg»-filnavnene nå er med store bokstaver. Faktisk, for å være strengt nøyaktig, er de ikke «.prg»-filer lenger. De er «.PRG»-filer. Linux skiller mellom store og små bokstaver.

Vi kan reversere den siste kommandoen ved å reversere posisjonen til az- og AZ-leddene i det sentrale uttrykket.

gi nytt navn til «y/AZ/az/» *.PRG

ls *.prg

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

Å sette seg inn i Perl er vel brukt tid. Men for å begynne å bruke de tidsbesparende egenskapene til rename-kommandoen, trenger du ikke ha mye Perl-kunnskap i det hele tatt for å høste store fordeler i kraft, enkelhet og tid.