如何在bash中找到归档的压缩方法

时间:2011-03-21 14:34:08

标签: bash shell

我需要在调用我的脚本时找到参数中的归档类型(压缩方法),并且使用压缩方法使用tar和正确的选项。

我发现文件命令返回有关文件的信息,所以我可以从中得到第二列并使用一些条件并检查它是什么(我只需要支持tar压缩gzip或bzip2压缩和压缩但我不应该通过postfix检查,但按内容检查)。

所以我想问一下是否有更好的方法来获取归档的压缩方法然后通过文件并获得第二列。感谢

2 个答案:

答案 0 :(得分:4)

GNU tar的最新版本本身可以解决这个问题,因此您不必例如tar -xvf myarchive.tar.gz就够了

否则使用例如这样:

function extract()
{
     if [ -f $1 ] ; then
         case $1 in
             *.tar.bz2)   tar xvjf $1     ;;
             *.tar.gz)    tar xvzf $1     ;;
             *.bz2)       bunzip2 $1      ;;
             *.rar)       unrar x $1      ;;
             *.gz)        gunzip $1       ;;
             *.tar)       tar xvf $1      ;;
             *.tbz2)      tar xvjf $1     ;;
             *.tgz)       tar xvzf $1     ;;
             *.zip)       unzip $1        ;;
             *.Z)         uncompress $1   ;;
             *.7z)        7z x $1         ;;
             *)           echo "'$1' cannot be extracted via >extract<" ;;
         esac
     else
         echo "'$1' is not a valid file"
     fi
}

如果您想检查内容,并且只关心bzip2或gzipped tar档案,请执行以下操作:

function extract() {
    if file $1 | grep bzip2 >/dev/null ; then
      tar -xvjf $1
    elif file $1 | grep gzip >/dev/null ; then
        tar -xvzf $1
    else
        echo "'$1' is not a valid file"
    fi
}

答案 1 :(得分:2)

您最好的选择是依赖于file,或者查找可能的幻数(通常放在文件开头的文件类型标识符)并自行计算。

例如,ZIP文件以“PK”开头,BZip2文件以“BZ”开头。这些神奇的数字可能会更长,但这就是我刚才看到的时候注意到的。