问:
我想分别获取文件名(不带扩展名)和扩展名。
到目前为止,我发现的最佳解决方案是:
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 解释器。
有什么更好的主意吗?
答:
首先,获取不包含路径的文件名:
filename=$(basename -- "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"
或者,你可以专注于路径的最后一个 '/' 而不是 '.',即使你的文件扩展名不可预测,也能正常工作:
filename="${fullfile##*/}"
你可能需要查看文档:
● web 上 "3.5.3 Shell Parameter Expansion"[1] 一节
● 在 bash 手册的 "Parameter Expansion" 一节中
另有代码示例如下:
~% FILE="example.tar.gz"
~% echo "${FILE%%.*}"
example
~% echo "${FILE%.*}"
example.tar
~% echo "${FILE#*.}"
tar.gz
~% echo "${FILE##*.}"
gz
参考文档:
- stackoverflow question 965053
- 1 Shell Parameter Expansion (Bash Reference Manual)
- 2 Pattern Matching (Bash Reference Manual)
相关阅读: