Ekstraktige Bashis failinimi ja laiend

Sissejuhatus

On palju põhjuseid, miks võiksite Bashis failinime ja laiendi ekstraktida:

  • Failinime või laiendiga manipuleerimiseks – Võimalik, et soovite failinime või laiendi ekstraktida, et seda muuta, näiteks lisada failinimele ees- või järelliide või muuta faililaiendit.

  • Unikaalse nimega faili loomiseks – Võimalik, et soovite failinime ja laiendi ekstraktida, et luua uus kordumatu nimega fail, näiteks lisades failinimele ajatempli või juhusliku numbri.

  • Failinime või laiendi kasutamiseks skriptis või käsus – Võimalik, et soovite failinime või laiendi ekstraktida, et kasutada seda skripti või käsu argumendina või sisendina, näiteks edastada see programmile või luua kataloogina sama nimega fail.

  • Teabe eraldamiseks failinimest või laiendist – Võimalik, et soovite failinime või laiendi ekstraheerida, et saada sellest teavet (nt kuupäev või failitüüp).

Selles artiklis vaatleme kolme kõige levinumat viisi, kuidas saate Bashis failinime ja faililaiendit ekstraktida. Vaatame neid kõiki ning anname teile plusse ja miinuseid, et saaksite teha haritud otsuse, milline lähenemisviis teile kõige paremini sobib.

1. meetod: kasutades basenime käsk

. basename käsku saab kasutada failinime ja laiendi eraldamiseks failiteelt:

filename=$(basename /path/to/file.txt)
echo $filename

Kuigi see meetod on üsna lihtne ja hõlpsasti kasutatav, ei saa me kahjuks kuidagi ilma järeltöötluseta välja võtta ainult failinime (ilma laiendita).

Võite kasutada ka dirname käsk kataloogi tee eraldi väljavõtmiseks:

directory=$(dirname /path/to/file.txt)
echo $directory

Plussid:
  • Lihtne kasutada
  • Käsitleb tühikutega failinimesid õigesti
Miinused:
  • Ekstraktib ainult failinime ja ei saa laiendit eraldi välja võtta ilma täiendava töötlemiseta

2. meetod: parameetri laiendamise kasutamine

Bash pakub funktsiooni nimega parameetrite laiendamine, mis võimaldab erilise süntaksi abil eraldada muutuja osi. Näiteks saate muutujasse salvestatud failiteelt failinime ja laiendi ekstraktimiseks kasutada järgmist süntaksit:

filepath="/path/to/file.txt"
filename=${filepath##*/}
echo $filename

Parameetri laiendust saate kasutada ka laienduse eraldi väljavõtmiseks:

extension=${filename##*.}
echo $extension

Plussid:
  • Paindlik
  • Saab eraldada nii failinime kui laiendi eraldi,
  • Käsitleb tühikutega failinimesid õigesti
Miinused:
  • Failitee salvestamiseks on vaja muutujat

3. meetod: kasutades awk käsk

. awk käsk on võimas tekstitöötlustööriist, mida saab kasutada stringi osade eraldamiseks. Näiteks saate failinime ja laiendi eraldamiseks failiteest kasutada järgmist süntaksit:

filepath="/path/to/file.txt"
filename=$(echo $filepath | awk -F/ '{print $NF}')
echo $filename

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Vous pouvez aussi kasutamine awk laienduse eraldi väljavõtmiseks:

extension=$(echo $filename | awk -F. '{print $NF}')
echo $extension

Plussid:
  • Võimas
  • Saab eraldada nii failinime kui laiendi eraldi
  • Käsitleb tühikutega failinimesid õigesti
Miinused:
  • Süntaks võib mõnele kasutajale võõras olla
  • Nõuab failitee läbiviimist awk

Järeldus

Üldiselt võib Bashis failinime ja faililaiendi ekstraheerimine olla kasulik tehnika failidega töötamiseks ja mitmesuguste ülesannete täitmiseks Bashi kestas.

Igal nimetatud meetodil on oma eelised ja puudused ning parim valik sõltub teie konkreetsetest vajadustest ja eelistustest. Sageli on kasulik tutvuda mitme lähenemisviisiga, et saaksite valida oma olukorra jaoks sobivaima.

Ajatempel:

Veel alates Stackabus