在 Bash 中提取文件名和扩展名

问题描述

首先,获取不带路径的文件名:

filename=$(basename -- "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"

或者,您可以关注路径的最后一个“/”而不是“。” 即使您有不可预测的文件扩展名,它也应该工作:

filename="${fullfile##*/}"

解决方法

我想分别获取文件名(不带扩展名)和扩展名。

到目前为止我发现的最佳解决方案是:

NAME=`echo "$FILE" | cut -d'.' -f1`
EXTENSION=`echo "$FILE" | cut -d'.' -f2`

.这是错误的,因为如果文件名包含多个字符,它就不起作用。如果,假设我有a.b.js,它将考虑aand b.js,而不是a.band js

它可以很容易地在 Python 中完成

file,ext = os.path.splitext(path)

但如果可能的话,我不希望为此启动 Python 解释器。

有更好的想法吗?