Liksom de flesta operativsystem stöder Linux filnamn med mellanslag i dem. Men att använda dessa filnamn på kommandoraden är inte alltid enkelt. Här är flera sätt du kan hantera filnamn som innehåller utrymmen.
Det ödmjuka filnamnet
Varför utrymmen i Linux -filnamn är smärta
Hur man citerar och flyr ut utrymmen
Hur man fixar rymdproblemet vid källan
Tabutvidgningen gör det enkelt att hantera utrymmen
Hur man använder filnamn med mellanslag i bash -skript
Åtskilda, men inte flagniga
Det ödmjuka filnamnet
Allt lagrat på din dator hårddisk måste ha ett namn. Utan ett namn skulle inga filer existera. Alla applikationer och demoner som lanseras när datorn startar upp och all programvara som du använder måste identifieras och lagras i ett filsystem. Den identifieringen är namnet på filen. '
Samma sak gäller de filer som du skapar eller installerar. Alla dina dokument, bilder och musik behöver filnamn. Utan filnamn kunde ingen av dina digitala tillgångar existera. Eftersom filnamn är så viktiga försöker Linux hårt att införa så få regler om deras sammansättning som den kan.
På Linux kan ett filnamn innehålla valfritt tecken bortsett från den främre snedstrecket “
/
”Och nollkaraktären,
0x00
. Nollteckenet används för att markera slutet på en sträng, så att den inte kan vara närvarande i själva strängen, eller Linux skulle trunkera filnamnet vid nollkaraktärens position. "
/
”Framåt snedstreck används som separator i katalogvägar.
Filnamn är skiftlägeskänsliga, och kan vara upp till 255 byte långa , inklusive nollkaraktären. Katalogvägar kan vara upp till 4096 byte långa, inklusive nollkaraktären. Observera att detta är deras längd i byte , som kanske inte motsvarar direkt tecken . 16-bitars Unicode-tecken, till exempel, tar två byte vardera.
Retro-computering entusiaster och de med långa minnen kommer att veta att under de tidiga dagarna av persondatorer, Microsofts diskoperativsystem , DOS, var skiftkänslig och hade en filnamngräns på åtta tecken, plus en tre-karaktär förlängning .
Du var tvungen att vara väldigt tankeväckande och ibland kreativ när du namngav filer. Som jämförelse innebär den frihet vi har idag att vi kan namnge filer vad vi vill, med lite tanke till något annat än den beskrivning vi skapar för den filen.
Men med filnamn, det som reser oss oftast är inte de karaktärer vi skriver, det är utrymmena mellan dem.
Varför utrymmen i Linux -filnamn är smärta
Skal som bash kommer att tolka en rymdseparerad sträng av ord som enskilda kommandoargument, inte ett enda argument. Här är ett exempel med att använda
Rör
till
skapa en ny fil
Kallade "min nya fil.txt."
Som vi kan se,
ls
Visar oss att det finns tre filer skapade, en som heter "My", en annan som heter "New", och en mer som heter "File.txt."
Anteckna det
Rör
Klagade inte eller kastade ett fel. Den utför vad den tror att vi ber det göra. Så det returnerar oss tyst till kommandoraden. Om vi inte är motiverade att kontrollera, vet vi inte att saker inte har gått enligt plan.
För att skapa den fil vi ville ha måste vi citera eller fly.
Hur man citerar och flyr ut utrymmen
Om vi citerar hela filnamnet,
Rör
vet att den måste behandla den citerade texten som ett enda argument.
Den här gången får vi den enda filen som vi förväntar oss.
Vi kan få samma resultat om vi använder backslash -karaktären “
\
”För att undkomma utrymmen. Genom att "fly" från utrymmen behandlas de inte som specialtecken - det vill säga argumentavskiljare - de anses vara vanliga gamla utrymmen.
Det fungerar, men flyktutrymmen gör att skrivande filnamn långsammare och felbenägna. Saker kan bli riktigt ful om du har katalognamn med mellanslag i dem också.
Det kommandot kopierar en enda textfil från en katalog som heter "Dir One" till en katalog som heter "Dir Two" och sparar kopian som en Bak -fil. Och det är ett ganska enkelt exempel.
Hur man fixar rymdproblemet vid källan
Om de är dina egna filer kan du fatta politiska beslut att aldrig använda utrymmen och skapa (eller byte namn på ) filnamn som detta.
Det är visserligen en robust lösning men det är fortfarande ful. Det finns bättre alternativ, till exempel att använda streck ”
-
”Eller understryker”
_
”För att separera dina ord.
Båda dessa kommer att undvika problemet och de är läsbara. Om du inte vill lägga till extra tecken till dina filnamn kan du använda Kamelcase För att göra dina filnamn läsbara, så här:
Tabutvidgningen gör det enkelt att hantera utrymmen
Naturligtvis kommer att anta en namnkonvention och hålla dig till den bara hjälpa när du har att göra med dina egna filer. Filer som kommer från någon annanstans är osannolikt att följa din antagna namnkonvention.
Du kan använda flikutvidgning för att hjälpa dig exakt "fylla i" filnamn för oss. Låt oss säga att vi vill
radera
Bak -filen som vi skapade i "Dir Two", med hjälp av
rm
.
Vi börjar med att skriva "rm dir" eftersom vi använder
rm
Kommando och vi vet att katalognamnet börjar med "Dir."
Att trycka på "Tab" -tangenten får Bash att söka efter matchningar i den aktuella katalogen.
Det finns två kataloger som börjar med "dir", och i båda fallen är nästa karaktär ett utrymme. Så Bash lägger till backslash -karaktären “
\
”Och ett utrymme. Bash väntar sedan på att vi ska ge nästa karaktär. Den behöver nästa karaktär för att skilja mellan de två möjliga matcherna i denna katalog.
Vi skriver en "T", för "Two" och trycker sedan på "Tab" ännu en gång.
Bash slutför katalognamnet för oss och väntar på att vi skriver start på filnamnet.
Vi har bara en fil i den här katalogen, så att skriva den första bokstaven i filnamnet, "M", räcker för att låta Bash veta vilken fil vi vill använda. Att skriva "M" och trycka på "Tab" slutför filnamnet för oss och "Enter" kör hela kommandot.
Tabutvidgningen gör det enkelt att se till att du får filnamn rätt, och det påskyndar också att navigera och skriva på kommandoraden i allmänhet.
RELATERAD: Använd flikens slutförande för att skriva kommandon snabbare på alla operativsystem
Hur man använder filnamn med mellanslag i bash -skript
Det är ingen överraskning att skript har exakt samma problem med mellanslag i filnamn som kommandoraden gör. Om du skickar ett filnamn som variabel, se till att du citerar variabelnamnet.
Detta lilla skript kontrollerar den aktuella katalogen för filer som matchar filmönstret "*.txt" och lagrar dem i en variabel som heter
file_list
.
En
för
slinga
används för att utföra en enkel åtgärd på var och en.
Kopiera den här texten till en redaktör och spara den i en fil som heter "Files.sh." Använd sedan
de
chmod
kommando
för att göra det körbart.
Vi har några filer i den här katalogen. Den ena har ett enkelt filnamn, och de andra två använder understryker “
_
”Eller streck”
-
”I stället för utrymmen. Det här är vad vi ser när vi kör skriptet.
Det verkar fungera bra. Men låt oss ändra filerna i katalogen för filer som innehåller utrymmen i deras namn.
Varje ord i varje filnamn hanteras som om det var ett filnamn på egen hand, och så misslyckas skriptet. Men allt vi behöver göra för att få skripthandtaget i filnamn är att citera
$ fil
variabel inuti
för
slinga.
Observera att dollartecknet “
$
”Är inne i citaten. Vi gjorde den förändringen och sparade den i skriptfilen "Files.sh". Den här gången hanteras filnamnen korrekt.
RELATERAD: Hur man bearbetar en fillinje för rad i ett Linux -bash -skript
Åtskilda, men inte flagniga
Att undvika utrymmen i dina egna filnamn tar dig bara så långt. Det är oundvikligt att du kommer att möta filer från andra källor med namn som innehåller utrymmen. Tack och lov, om du behöver hantera dessa filer på kommandoraden eller i skript, finns det enkla sätt att göra det.