További
A fájlnév és kiterjesztés kivonása Bash-ben
A fájlnevet (kiterjesztés nélkül) és a kiterjesztést külön-külön szeretném megkapni.
A legjobb megoldás, amit eddig találtam, a következő:
NAME=`echo "$FILE" | cut -d'.' -f1`
EXTENSION=`echo "$FILE" | cut -d'.' -f2`
Ez azért rossz, mert nem működik, ha a fájlnév több .
karaktert tartalmaz. Ha, mondjuk, van a.b.js
, akkor a
és b.js
helyett a.b
és js
fog figyelembe venni.
Ez Pythonban könnyen elvégezhető a
file, ext = os.path.splitext(path)
de ha lehet, nem szeretnék Python-értelmezőt indítani csak ezért, ha lehetséges.
Valami jobb ötlet?
1951
3
Először is, a fájl nevét az elérési útvonal nélkül:
Alternatívaként az '.' helyett az elérési útvonal utolsó '/' -jére is összpontosíthat, aminek még akkor is működnie kell, ha kiszámíthatatlan fájlkiterjesztésekkel rendelkezik:
Érdemes megnézni a dokumentációt :
További részletekért lásd a shell parameter expansion a Bash kézikönyvben.
jól működik, így egyszerűen használhatod:
A parancsok egyébként a következőképpen működnek.
A
NAME
parancs a"."
karaktert, amelyet tetszőleges számú nem"."
karakter követ a sor végéig, semmivel helyettesíti (azaz az utolsó"."
-tól a sor végéig mindent eltávolít, beleértve a sort is). Ez alapvetően egy nem zsugori helyettesítés, amely regex trükköket használ.Az
EXTENSION
parancs a sor elején lévő tetszőleges számú karaktert, amelyet egy"."
karakter követ, a semmivel helyettesíti (azaz mindent eltávolít a sor elejétől az utolsó pontig, beleértve). Ez egy mohó helyettesítés, ami az alapértelmezett művelet.