在Bash中提取文件名和擴展名我想分別獲得文件名(沒有擴展名)和擴展名。到目前為止,我找到的最好的解決辦法是:NAME=`echo "$FILE" | cut -d'.' -f1`EXTENSION=`echo "$FILE" | cut -d'.' -f2`這是錯誤的,因為如果文件名包含多個.人物。如果,比方說,我有a.b.js,它會考慮a和b.js,而不是a.b和js.它可以很容易地用Python實現file, ext = os.path.splitext(path)但是,如果可能的話,我不希望只為此啟動Python解釋器。有更好的主意嗎?
4 回答
臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
首先,獲取沒有路徑的文件名:
filename=$(basename?--?"$fullfile")extension="${filename##*.}"filename="${filename%.*}"或者,您可以將注意力集中在路徑的最后一個“/”上,而不是“?!奔词鼓胁豢深A測的文件擴展名,它也可以工作:
filename="${fullfile##*/}"您可能需要查看文檔:
- 在網頁上“
3.5.3殼體參數擴展"
- 在bash手冊中稱為“參數展開”的部分。
湖上湖
TA貢獻2003條經驗 獲得超2個贊
~% FILE="example.tar.gz"
~% echo "${FILE%%.*}"
example
~% echo "${FILE%.*}"
example.tar
~% echo "${FILE#*.}"
tar.gz
~% echo "${FILE##*.}"
gz
HUWWW
TA貢獻1874條經驗 獲得超12個贊
basename filename .extension
basename /path/to/dir/filename.txt .txt
filename
慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
bash-3.2$ FILENAME=somefile.tar.gz
bash-3.2$ echo ${FILENAME%%.*}somefile
bash-3.2$ echo ${FILENAME%.*}somefile.tar./somefile.tar.gzecho ${FILENAME%%.*}.
FULL_FILENAME=$FILENAME
FILENAME=${FULL_FILENAME##*/}echo ${FILENAME%%.*})
${variable%pattern}
Trim the shortest match from the end
${variable##pattern}
Trim the longest match from the beginning
${variable%%pattern}
Trim the longest match from the end
${variable#pattern}
Trim the shortest match from the beginning- 4 回答
- 0 關注
- 1238 瀏覽
添加回答
舉報
0/150
提交
取消
