Beskrivning
Det finns många anledningar till varför du kanske vill extrahera filnamnet och filtillägget i Bash:
-
För att manipulera filnamnet eller filtillägget – Du kanske vill extrahera filnamnet eller filtillägget för att ändra det, som att lägga till ett prefix eller suffix till filnamnet eller ändra filtillägget.
-
För att skapa en fil med ett unikt namn – Du kanske vill extrahera filnamnet och filtillägget för att skapa en ny fil med ett unikt namn, till exempel genom att lägga till en tidsstämpel eller ett slumpmässigt nummer till filnamnet.
-
För att använda filnamnet eller filtillägget i ett skript eller kommando – Du kanske vill extrahera filnamnet eller filtillägget för att använda det som ett argument eller indata för ett skript eller kommando, som för att skicka det till ett program eller för att skapa en fil med samma namn som en katalog.
-
För att extrahera information från filnamnet eller filtillägget – Du kanske vill extrahera filnamnet eller filtillägget för att extrahera information från det, till exempel datum eller filtyp.
I den här artikeln tar vi en titt på de tre vanligaste sätten du kan extrahera filnamn och filtillägg i Bash. Vi tar en titt på var och en av dem och ger dig fördelarna och nackdelarna, så att du kan fatta ett välgrundat beslut om vilket tillvägagångssätt som passar dig bäst.
Metod 1: Använda basnamn Kommando
Smakämnen basename
kommandot kan användas för att extrahera filnamnet och filtillägget från en filsökväg:
filename=$(basename /path/to/file.txt)
echo $filename
Även om den här metoden är ganska enkel och lätt att använda, finns det tyvärr inget sätt att extrahera endast filnamnet (utan förlängning) utan någon efterbearbetning.
Du kan också använda dirname
kommando för att extrahera katalogsökvägen separat:
directory=$(dirname /path/to/file.txt)
echo $directory
Alla tillgångar på ett och samma ställe
- Enkel att använda
- Hanterar filnamn med mellanslag korrekt
Nackdelar:
- Extraherar endast filnamnet och kan inte extrahera tillägget separat utan ytterligare bearbetning
Metod 2: Använda parameterexpansion
Bash tillhandahåller en funktion som heter parameterutvidgning, som låter dig extrahera delar av en variabel med hjälp av en speciell syntax. Du kan till exempel använda följande syntax för att extrahera filnamnet och filtillägget från en sökväg som lagras i en variabel:
filepath="/path/to/file.txt"
filename=${filepath##*/}
echo $filename
Du kan också använda parameterexpansion för att extrahera tillägget separat:
extension=${filename##*.}
echo $extension
Alla tillgångar på ett och samma ställe
- Flexibelt
- Kan extrahera både filnamnet och tillägget separat,
- Hanterar filnamn med mellanslag korrekt
Nackdelar:
- Kräver en variabel för att lagra filsökvägen
Metod 3: Använda awk kommando
Smakämnen awk
command är ett kraftfullt textbearbetningsverktyg som kan användas för att extrahera delar av en sträng. Till exempel kan du använda följande syntax för att extrahera filnamnet och filtillägget från en filsökväg:
filepath="/path/to/file.txt"
filename=$(echo $filepath | awk -F/ '{print $NF}')
echo $filename
Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!
Du kan också använda awk
för att extrahera tillägget separat:
extension=$(echo $filename | awk -F. '{print $NF}')
echo $extension
Alla tillgångar på ett och samma ställe
- Kraftfull
- Kan extrahera både filnamnet och tillägget separat
- Hanterar filnamn med mellanslag korrekt
Nackdelar:
- Syntax kan vara obekant för vissa användare
- Kräver att filsökvägen leds igenom
awk
Slutsats
Sammantaget kan extrahera filnamnet och filtillägget för en fil i Bash vara en användbar teknik för att arbeta med filer och utföra olika uppgifter i Bash-skalet.
Var och en av de nämnda metoderna har sina egna fördelar och nackdelar, och det bästa valet beror på dina specifika behov och preferenser. Det är ofta användbart att vara bekant med flera tillvägagångssätt så att du kan välja den som är bäst lämpad för din situation.