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.