在bash中检查文件扩展名的最简单方法是什么?

时间:2013-08-16 17:30:20

标签: bash shell unix gzip

我有一个shell脚本,如果文件是压缩的(以.gz结尾),我需要执行一个命令,如果不是,则需要执行另一个命令。我不确定如何处理这个,这里是我正在寻找的概述:

file=/path/name*

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

3 个答案:

答案 0 :(得分:41)

您可以使用简单的正则表达式,使用=~测试中的[[...]]运算符执行此操作:

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

答案 1 :(得分:26)

真的,在shell脚本中匹配这样的模式的最清晰且最简单的方法是使用case

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

答案 2 :(得分:11)

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

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