在Bash中提取文件名和扩展名
我想分别获取文件名(不带扩展名)和扩展名。
目前为止我发现的最佳解决方案是:
NAME=`echo "$FILE" | cut -d'.' -f1`
EXTENSION=`echo "$FILE" | cut -d'.' -f2`
这是错误的,因为如果文件名包含多个“。”,则它不起作用。 字符。 如果我们说,我有abjs,它会考虑a和b.js ,而不是ab和js 。
它可以很容易地在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