Самый простой способ проверить расширение файла в bash?

У меня есть оболочка script, где мне нужно сделать одну команду, если файл зашифрован (заканчивается на .gz), а другой - нет. Я не совсем уверен, как подойти к этому, вот схема того, что я ищу:

file=/path/name*

if [ CHECK FOR .gz ]
then echo "this file is zipped"
else echo "this file is not zipped"
fi

Ответ 1

Вы можете сделать это с помощью простого регулярного выражения, используя оператор =~ внутри теста [[...]]:

if [[ $file =~ \.gz$ ]];

Это не даст вам правильного ответа, если расширение .tgz, если вам это интересно. Но это легко исправить:

if [[ $file =~ \.t?gz$ ]];

Отсутствие котировок вокруг регулярного выражения является необходимым и важным. Вы можете процитировать $file, но нет смысла.

Вероятно, лучше использовать утилиту file:

$ file --mime-type something.gz
something.gz: application/x-gzip

Что-то вроде:

if file --mime-type "$file" | grep -q gzip$; then
  echo "$file is gzipped"
else
  echo "$file is not gzipped"
fi

Ответ 2

Действительно, самый яркий и часто самый простой способ сопоставить такие шаблоны в оболочке script с case

case "$f" in
*.gz | *.tgz ) 
        # it gzipped
        ;;
*)
        # it not
        ;;
esac

Ответ 3

Вы можете попробовать что-то вроде этого: -

if [[ ${file: -3} == ".gz" ]]