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

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

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

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

这是错误的,因为如果文件名包含多个“。”,则它不起作用。 字符。 如果我们说,我有abjs,它会考虑ab.js ,而不是abjs

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

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

但如果可能的话,我宁愿不要为此解雇Python解释器。

任何更好的想法?


首先,获取没有路径的文件名:

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

或者,您可以专注于路径的最后'/'而不是'。'。 即使你有不可预知的文件扩展名也应该可以工作:

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

~% FILE="example.tar.gz"
~% echo "${FILE%%.*}"
example
~% echo "${FILE%.*}"
example.tar
~% echo "${FILE#*.}"
tar.gz
~% echo "${FILE##*.}"
gz

有关更多详细信息,请参阅Bash手册中的shell参数扩展。


通常你已经知道扩展名,所以你可能希望使用:

basename filename .extension

例如:

basename /path/to/dir/filename.txt .txt

我们得到了

filename
链接地址: http://www.djcxy.com/p/1675.html

上一篇: Extract filename and extension in Bash

下一篇: Check if a program exists from a Bash script