Extract filename and extension in Bash
bash, filenames, string
Solution
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##*/}"
You may want to check the documentation :
- On the web at section "3.5.3 Shell Parameter Expansion"
- In the bash manpage at section called "Parameter Expansion"
Problem
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 `a.b.js`, it will consider `a` and `b.js`, instead of `a.b` and `js`. It can be easily done in Python with ``` file, ext = os.path.splitext(path) ``` but I'd prefer not to fire up a Python interpreter just for this, if possible. Any better ideas?