Extract filename and extension in Bash
I want to get the filename (without extension) and the extension separately.
The best solution I found so far is:
NAME=`echo "$FILE" | cut -d'.' -f1`
EXTENSION=`echo "$FILE" | cut -d'.' -f2`
This is wrong because it doesn't work if the file name contains multiple "." characters. If, let's say, I have abjs it will consider a and b.js , instead of ab and js .
It can be easily done in Python with
file, ext = os.path.splitext(path)
but I'd prefer not to fire a Python interpreter just for this, if possible.
Any better ideas?
First, get file name without the path:
filename=$(basename -- "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"
Alternatively, you can focus on the last '/' of the path instead of the '.' which should work even if you have unpredictable file extensions:
filename="${fullfile##*/}"
~% FILE="example.tar.gz"
~% echo "${FILE%%.*}"
example
~% echo "${FILE%.*}"
example.tar
~% echo "${FILE#*.}"
tar.gz
~% echo "${FILE##*.}"
gz
有关更多详细信息,请参阅Bash手册中的shell参数扩展。
Usually you already know the extension, so you might wish to use:
basename filename .extension
for example:
basename /path/to/dir/filename.txt .txt
and we get
filename
链接地址: http://www.djcxy.com/p/1676.html
上一篇: 如何在单引号字符串中转义单引号?
下一篇: 在Bash中提取文件名和扩展名