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. Rename
er 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 mv
kommandoen 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 mv
er ikke et dedikert verktøy for filnavn.
Gi nytt navn til en enkelt fil med mv
Brukes mv
til å 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 ls
til å 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. mv
har 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 mv
står i sterk kontrast til det enkle å 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 utvidelsen “.prog”. Vi vil gi dem et nytt navn på kommandolinjen slik at de får utvidelsen “.prg”.
Hvordan sliter vi mv
med å 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 mv
til å 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 rename
kommandoen.
rename
er 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 rename
slik:
sudo apt-get install omdøpe
I Fedora- og RedHat-avledede distribusjoner installerer du prename
slik. 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 ls
om det fungerte. Husk å erstatte rename
med 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
( prename
eller 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 s
betyr erstatning. Den første termen ( .prog
) er det som rename
vil 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 rename
kommandoen 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 ls
kommandoen 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 ls
kommandoen at ".c" -filene våre er forhåndsbetalt med "sl_". La oss bli kvitt det helt.
Den rename
kommandoen 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.
rename
vil 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 ls
kommandoen 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 ls
enda en gang for å se effekten rename
kommandoen 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 rename
kommandoen kommer til å 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, 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 rename
kommando bruker starten av linjen (^
) metategn før søkeordet "parameter". Dette forteller at rename
du 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 rename
ligger i kraften til Perl. All kraften til Perl står til din disposisjon.
Søke med grupperinger
rename
har 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 rename
kommandoen 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 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.
I rename
kommandoen nedenfor legger du merke til at vi ikke bruker en for s/
å starte det sentrale uttrykket, vi bruker y/
. Dette forteller at rename
vi 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 ls
kommandoen 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-z
og 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 rename
kommandoen, trenger du ikke å ha mye Perl-kunnskap i det hele tatt for å høste store fordeler i kraft, enkelhet og tid.