Hvordan bruke omdøpe kommandoen på Linux

Gjør deg kjent med filen som omdøper kraftverket i Linux-verdenen og gi mv— og deg selv — en hvile. Renameer fleksibel, rask og noen ganger enda enklere. Her er en veiledning til dette kraftverket for en kommando.

Hva er galt med mv?

Det er ingenting galt med mv. Kommandoen gjør 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 bulldozer, ikke en spade.

Den mvkommandoen har et mål i livet, og det er å flytte filer. Det er en lykkelig 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, så vi får det vi ønsker. Men mver ikke et dedikert verktøy for filnavn.

Gi nytt navn til en enkelt fil med mv

Brukes mvtil å gi nytt navn til en filtype mv, et mellomrom, navnet på filen, et mellomrom og det nye navnet du vil at filen skal ha. Trykk deretter på Enter.

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

mv oldfile.txt newfile.txt
ls * .txt

Endre navn på flere filer med mv

Ting blir vanskeligere når du vil gi nytt navn til flere filer. mvhar ingen mulighet til å håndtere å gi nytt navn til flere filer. Du må ty til å bruke noen smarte Bash-triks. Det er greit hvis du kjenner til kommandolinjefu av middels klasse, men kompleksiteten ved å gi nytt navn til flere filer mvstår i sterk kontrast til det enkle å bruke mvtil å 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 utvidelsen “.prog”. Vi vil gi dem et nytt navn på kommandolinjen slik at de får utvidelsen “.prg”.

Hvordan sliter vi mvmed å 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 ty til å skrive en faktisk Bash-skriptfil.

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

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.

Hva skjedde nå?

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

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

Den første delen starter en sløyfe som skal behandle hver “.prog” -fil i katalogen.

Den neste delen sier hva behandlingen vil gjøre . Den bruker  mvtil å flytte hver fil til en ny fil. Den nye filen kommer til å bli navngitt med den originale filnavnet unntatt “.prog” -delen. En ny utvidelse av “.prg” vil bli brukt i stedet.

Det må være en enklere måte

Mest sannsynlig. Det er renamekommandoen.

renameer ikke en del av en standard Linux-distribusjon, så du må installere den. Det har også et annet navn i forskjellige familier av Linux, men de fungerer alle på samme måte. Du må bare erstatte riktig kommandonavn i henhold til Linux-smaken du bruker.

i Ubuntu- og Debian-avledede distribusjoner installerer du renameslik:

sudo apt-get install omdøpe

I Fedora- og RedHat-avledede distribusjoner installerer du prenameslik. Legg merke til den innledende "p", som står for Perl.

sudo dnf installer fornavn

Bruk følgende kommando for å installere den i Manjaro Linux. Merk at omdøpningskommandoen kalles perl-rename.

sudo pacman -Syu perl-omdøpe

La oss gjøre det igjen

Og denne gangen bruker vi rename. Vi ruller klokken tilbake 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 lsom det fungerte. Husk å erstatte renamemed riktig kommandonavn for Linux hvis du ikke bruker Ubuntu eller et Linux-avledet av Debian.

endre navn på 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 med denne tiden?

La oss forklare den biten av magi, i tre deler.

Den første delen er kommandonavnet, rename( prenameeller perl-rename, for de andre distribusjonene).

Den siste delen er *.prog, som forteller om renameå operere alle ".prog" filer.

Den midterste delen definerer arbeidet vi ønsker å gjøre på hvert filnavn. Det sbetyr erstatning. Den første termen ( .prog) er det som renamevil søke etter i hvert filnavn, og den andre termen ( .prg) er det den skal erstattes med.

Den midterste delen av kommandoen, eller det sentrale uttrykket, er et Perl 'vanlig uttrykk', og det er det som gir renamekommandoen sin fleksibilitet.

Endre andre deler av et filnavn

Vi har endret filnavnutvidelser 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 skal erstatte alle forekomster av “slang_” med “sl_”. Formatet på kommandoen er allerede kjent for oss. Vi endrer bare søkeord, erstatningsterm og filtype.

endre navn på s / slang_ / sl_ '*. c

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

Vi kan sjekke resultatet av den kommandoen ved å gjenta lskommandoen ovenfra med de samme parametrene:

ls sl * .c

Slette en del av et filnavn

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

ls * .c
endre navn på s / sl _ // '* .c
ls * .c

Vi kan se fra lskommandoen at ".c" -filene våre er forhåndsbetalt med "sl_". La oss bli kvitt det helt.

Den renamekommandoen følger samme format som før. Vi skal se etter ".c" -filer. Søkeordet er "sl_", men det er ingen erstatningsuttrykk. To tilbakeslag uten noe mellom seg betyr ingenting, en tom streng.

renamevil behandle hver “.c” -fil etter tur. Den vil søke etter “sl_” i filnavnet. Hvis den blir funnet, blir den erstattet av ingenting. Med andre ord blir søkeordet slettet.

Den andre bruken av lskommandoen bekrefter at prefikset “sl_” er fjernet fra hver “.c” -fil.

Begrens endringer til spesifikke deler av filnavn

La oss ls se på filer som har strengen “param” i filnavnet. Så bruker vi renameå erstatte den strengen med strengen “parameter”. Vi bruker lsenda en gang for å se effekten renamekommandoen har hatt på disse filene.

ls * param *
endre navn på 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 begynnelsen av navnet sitt. third_param.c har "param" på slutten av navnet sitt, like før utvidelsen.

Den renamekommandoen kommer til å søke etter “param” overalt i filnavnet, og erstatte den med “parameter” i alle tilfeller.

Den andre bruken av  lskommandoen viser oss at det er akkurat det som har skjedd. Enten “param” var i starten eller på slutten av filnavnet, er det erstattet med “parameter”.

Vi kan bruke Perls metategn for å avgrense oppførselen til mellomuttrykket. Metategn er symboler som representerer posisjoner eller sekvenser av tegn. For eksempel ^betyr "start av en streng", $betyr "slutt på en streng" og .betyr hvilket som helst enkelt tegn (bortsett fra et nytt linjetegn).

Vi skal bruke starten på strengmetakarakter ( ^) for å begrense søket til starten av filnavnene.

ls * param * .c
endre navn på s / ^ parameter / verdi / '*. c
ls * param * .c
ls verdi * .c

Filene vi omdøpte tidligere er oppført, og vi kan se strengen "parameter" er i begynnelsen av tre filnavn, og den er på slutten av et av filnavnene.

Vår renamekommando bruker starten av linjen  (^) metategn før søkeordet "parameter". Dette forteller at renamedu bare bør vurdere søkeordet som er funnet hvis det er i begynnelsen av filnavnet. Søkestrengen "parameter" vil bli ignorert hvis den er noe annet sted i filnavnet.

Når vi sjekker med ls, kan vi se at filnavnet som hadde “parameter” på slutten av filnavnet ikke er endret, men de tre filnavnene som hadde “parameteren” i begynnelsen av navnene deres, har fått søkestrengen erstattet av erstatningsuttrykket. "verdi."

Kraften til renameligger i kraften til Perl. All kraften til Perl står til din disposisjon.

Søke med grupperinger

renamehar enda flere triks i ermet. La oss vurdere saken 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 for ls å sjekke hvilke filer vi har som starter med “str”. Det er to av dem, string.c og strangle.c. Vi kan gi begge strengene nytt navn samtidig med en teknikk som kalles gruppering.

Det sentrale uttrykket i denne renamekommandoen vil søke etter strenger innenfor filnavn som har tegnsekvensen "stri" eller "stra" der disse sekvensene umiddelbart blir fulgt av "ng". Med andre ord kommer søkeordet til å se etter "streng" og "merkelig". Erstatningsuttrykket er "smell".

ls str * .c
endre navn på s / (stri | stra) ng / bang / '* .c
Jeg forbyr * .c

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

Bruke oversettelser med nytt navn

Den renamekommandoen 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.

I renamekommandoen nedenfor legger du merke til at vi ikke bruker en for s/ å starte det sentrale uttrykket, vi bruker y/. Dette forteller at  renamevi ikke utfører en erstatning; vi utfører en oversettelse.

Den a-z sikt er en Perl uttrykk som betyr at alle små bokstaver i sekvensen fra a til z. Tilsvarende A-Z representerer begrepet alle store bokstaver i sekvensen fra A til Å.

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

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

endre navn på 'y / az / AZ /' * .prg

ls * .PRG

De lskommandoen viser oss at alle de “.prg” filnavn er nå i store bokstaver. For å være strengt nøyaktig er de faktisk ikke ".prg" -filer lenger. De er ".PRG" -filer. Linux er store og små bokstaver.

Vi kan reversere den siste kommandoen ved å reversere posisjonen til a-zog A-Z vilkårene i det sentrale uttrykket.

endre navn på 'y / AZ / az /' * .PRG

ls * .prg

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

Å ta tak i Perl er godt brukt tid. Men for å begynne å bruke tidsbesparende funksjoner i renamekommandoen, trenger du ikke å ha mye Perl-kunnskap i det hele tatt for å høste store fordeler i kraft, enkelhet og tid.