35

我有一个 shell 脚本,如果文件被压缩(以 .gz 结尾),我需要在其中执行一个命令,如果不是,则执行另一个命令。我不太确定如何解决这个问题,这是我正在寻找的内容的概述:

file=/path/name*

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

3 回答 3

62

你可以用一个简单的正则表达式来做到这一点,=~在测试中使用运算符[[...]]

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
于 2013-08-16T17:39:57.850 回答
37

确实,在 shell 脚本中匹配此类模式的最清晰且通常最简单的方法是使用case

case "$f" in
*.gz | *.tgz ) 
        # it's gzipped
        ;;
*)
        # it's not
        ;;
esac
于 2013-08-16T19:01:47.477 回答
14

你可以尝试这样的事情: -

if [[ ${file: -3} == ".gz" ]]
于 2013-08-16T17:33:34.007 回答