Extrahera filnamn och tillägg i Bash

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.

Tidsstämpel:

Mer från Stackabuse