我想分别获取文件名(没有扩展名)和扩展名。
我到目前为止找到的最佳解决方案是:
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