How to check the extension of a filename in a bash script?
Make
if [ "$file" == "*.txt" ]
like this:
if [[ $file == *.txt ]]
That is, double brackets and no quotes.
The right side of ==
is a shell pattern.
If you need a regular expression, use =~
then.
I think you want to say "Are the last four characters of $file equal to .txt
?" If so, you can use the following:
if [ ${file: -4} == ".txt" ]
Note that the space between file:
and -4
is required, as the ':-' modifier means something different.
You just can't be sure on a Unix system, that a .txt file truly is a text file. Your best bet is to use "file". Maybe try using:
file -ib "$file"
Then you can use a list of MIME types to match against or parse the first part of the MIME where you get stuff like "text", "application", etc.