I never can remember this:

filename=foo.txt
echo ${filename%.*}

will remove the trailing “.txt”. Mnemonic: % sorta looks like dividing two circles. “%.*” says to divide at the period, matching any file type.

I often use a for loop which looks something like:

for f in foo*.txt ; do
    echo ${f%.txt}
done

Keyword fodder: bash, shell script, remove file type, remove file extension, basename, base name, Linux, Unix