Som de fleste operativsystemer, støtter Linux filnavn med mellomrom i seg. Men å bruke disse filnavnene på kommandolinjen er ikke alltid grei. Her er flere måter du kan håndtere filnavn som inneholder mellomrom.
Det ydmyke filnavnet
Hvorfor mellomrom i Linux -filnavn er vondt
Hvordan sitere og rømme rom
Hvordan fikse romproblemet ved kilden
Fanenes utvidelse gjør det enkelt å håndtere mellomrom
Hvordan bruke filnavn med mellomrom i bash -skript
Avstand ut, men ikke flassende
Det ydmyke filnavnet
Alt som er lagret på datamaskinens harddisk trenger å ha et navn. Uten navn ville ingen filer eksistere. Alle applikasjonene og demonene som lanseres når datamaskinen din starter opp, og all programvaren du bruker, må identifiseres og lagres i et filsystem. Denne identifikasjonen er navnet på filen. '
Det samme gjelder filene du oppretter eller installerer. Alle dokumentene, bildene og musikken din trenger filnavn. Uten filnavn kunne ingen av dine digitale eiendeler eksistere. Fordi filnavn er så viktige, prøver Linux hardt å pålegge like få regler om deres sammensetning som den kan.
På Linux kan et filnavn inneholde hvilken som helst karakter bortsett fra den fremre skråstreken “
/
”Og nullkarakteren,
0x00
. NULL -karakteren brukes til å markere enden av en streng, så det kan ikke være til stede i selve strengen, eller Linux vil avkortes filnavnet på NULL -karakterens plassering. “
/
”Forward Slash brukes som separator i katalogstier.
Filnavn er saksfølsomme, og kan være opptil 255 byte lange , inkludert nullkarakteren. Katalogstier kan være opptil 4096 byte lange, inkludert NULL -karakteren. Merk at dette er deres lengde i byte , som kanskje ikke tilsvarer direkte med tegn . 16-biters Unicode-tegn tar for eksempel to byte hver.
Retro-beregningsentusiaster og de med lange minner vil vite at i de første dagene av personlige datamaskiner, Microsofts diskoperativsystem , Dos, var case ufølsom og hadde en filnavnsgrense på åtte tegn, pluss en tre-karakter Utvidelse .
Du måtte være veldig gjennomtenkt og noen ganger kreativ når du navngir filer. Til sammenligning betyr friheten vi har i dag at vi kan navngi filer hva vi vil, med lite tanker til noe annet enn beskrivelsen vi lager for den filen.
Men med filnavn, det som reiser oss oftest, er ikke karakterene vi skriver, det er mellomrommene mellom dem.
Hvorfor mellomrom i Linux -filnavn er vondt
Skall som Bash vil tolke en rom-separert streng med ord som individuelle kommandoargumenter, ikke et eneste argument. Her er et eksempel ved å bruke
ta på
til
Opprett en ny fil
kalt "min nye fil.txt."
Som vi kan se,
ls
Viser oss at det er opprettet tre filer, en som heter "My", en annen som heter "New", og en til som heter "File.txt."
Noter det
ta på
Klaget ikke eller kastet en feil. Det utfører hva den tror vi ber det om å gjøre. Så det returnerer oss lydløst til kommandolinjen. Hvis vi ikke er motiverte til å sjekke, vet vi ikke at ting ikke har gått etter planen.
For å lage filen vi ønsket, må vi sitere eller rømme.
Hvordan sitere og rømme rom
Hvis vi siterer hele filnavnet,
ta på
vet at den trenger å behandle den siterte teksten som et enkelt argument.
Denne gangen får vi enkeltfilen som vi forventer.
Vi kan få det samme resultatet hvis vi bruker Backslash -karakteren "
\
”For å unnslippe mellomrommene. Ved å "slippe unna" områdene de ikke blir behandlet som spesialtegn - det vil si at argumenteseparatorer - blir de ansett for å være vanlige gamle rom.
Det fungerer, men rømming av rom gjør å skrive filnavn tregere og feilutsatt. Ting kan bli veldig stygge hvis du også har katalognavn med mellomrom i dem.
Denne kommandoen kopierer en enkelt tekstfil fra en katalog kalt “Dir One” til en katalog som heter “Dir Two”, og lagrer kopien som en bakfil. Og det er et ganske enkelt eksempel.
Hvordan fikse romproblemet ved kilden
Hvis de er dine egne filer, kan du ta politikkbeslutningen om å aldri bruke rom, og opprette (eller Bulk nytt navn ) filnavn som dette.
Riktignok er det en robust løsning, men det er fremdeles stygt. Det er bedre alternativer, for eksempel å bruke streker "
-
”Eller understreker”
_
”For å skille ordene dine.
Begge disse vil omgå problemet, og de er lesbare. Hvis du ikke vil legge til ekstra tegn til filnavnene dine, kan du bruke Camelcase For å gjøre filnavnene dine lesbare, slik:
Fanenes utvidelse gjør det enkelt å håndtere mellomrom
Å ta i bruk en navnekonvensjon og holde seg til det vil selvfølgelig bare hjelpe når du har å gjøre med dine egne filer. Filer som kommer fra andre steder vil neppe følge ditt vedtatte navnekonvensjon.
Du kan bruke tabutvidelse for å hjelpe deg med å "fylle ut" filnavn for oss nøyaktig. La oss si at vi vil
slett
Bak -filen vi opprettet i “Dir Two”, ved hjelp av
rm
.
Vi starter med å skrive “RM Dir” fordi vi bruker
rm
Kommando og vi vet at katalognavnet starter med "Dir."
Å trykke på "Tab" -tasten får Bash til å skanne etter kamper i den gjeldende katalogen.
Det er to kataloger som starter med “Dir”, og i begge tilfeller er neste karakter et rom. Så Bash legger til backslash -karakteren “
\
”Og et rom. Bash venter deretter på at vi skal gi neste karakter. Den trenger neste karakter for å skille mellom de to mulige kampene i denne katalogen.
Vi skriver en "T", for "to", og trykker deretter på "Tab" en gang til.
Bash fullfører katalognavnet for oss og venter på at vi skriver starten på filnavnet.
Vi har bare en fil i denne katalogen, så å skrive den første bokstaven i filnavnet, "M", er nok til å gi beskjed om hvilken fil vi vil bruke. Å skrive “M” og trykke på “Tab” fullfører filnavnet for oss, og “Enter” utfører hele kommandoen.
Faneutvidelse gjør det enkelt å sikre at du får filnavn riktig, og det fremskynder også å navigere og skrive på kommandolinjen generelt.
I SLEKT: Bruk fane fullføring for å skrive kommandoer raskere på et hvilket som helst operativsystem
Hvordan bruke filnavn med mellomrom i bash -skript
Det er ingen overraskelse det skript har nøyaktig de samme problemene med mellomrom i filnavn som kommandolinjen gjør. Hvis du passerer et filnavn som en variabel, må du sørge for at du siterer variabelnavnet.
Dette lille skriptet sjekker gjeldende katalog for filer som samsvarer med filmønsteret “*.txt”, og lagrer dem i en variabel som heter
file_list
.
EN
til
Løkke
brukes til å utføre en enkel handling på hver enkelt.
Kopier denne teksten til en redaktør og lagre den i en fil som heter "Files.sh." Bruk deretter
de
chmod
kommando
for å gjøre det kjøres.
Vi har noen filer i denne katalogen. Den ene har et enkelt filnavn, og de to andre bruker understreker "
_
”Eller streker”
-
”I stedet for mellomrom. Dette er hva vi ser når vi kjører manuset.
Det ser ut til å fungere pent. Men la oss endre filene i katalogen for filer som inneholder mellomrom i navnene deres.
Hvert ord i hvert filnavn håndteres som om det var et filnavn på egen hånd, og derfor mislykkes skriptet. Men alt vi trenger å gjøre for å lage skripthåndtakene i filnavn er å sitere
$ fil
variabel inne i
til
Løkke.
Legg merke til at dollarskiltet “
$
”Er inne i sitatene. Vi gjorde den endringen og lagret den i "files.sh" -skriptfilen. Denne gangen håndteres filnavnene riktig.
I SLEKT: Hvordan behandle en fillinje for linje i et Linux Bash -skript
Avstand ut, men ikke flassende
Å unngå mellomrom i dine egne filnavn vil bare ta deg så langt. Det er uunngåelig at du vil møte filer fra andre kilder med navn som inneholder mellomrom. Heldigvis, hvis du trenger å håndtere disse filene på kommandolinjen eller i skript, er det enkle måter å gjøre det på.