在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%.*}"
或者,您可以将注意力集中在路径的最后一个“/”上,而不是“。”即使您有不可预测的文件扩展名,它也可以工作:
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.gz
echo ${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 关注
- 1169 浏览
添加回答
举报
0/150
提交
取消