根据文件命令确定如何解压缩归档文件

NyaSol

我是bash脚本的新手,我想编写一个名为unpack的脚本,如下所示:

unpack [-r] [-v] file [file...]
-v - verbose
-r - recursive - will traverse contents of folders recursively, performing unpack on each.

我需要确定使用哪种压缩方式,并对这些压缩类型执行解压缩。

假设文件名和扩展名没有意义-知道使用哪种方法的唯一方法是通过file命令。我有4个拆箱选项gunzip, bunzip2, unzip, uncompress

所以我写了一个函数 execute_unpacking

exectute_unpacking(){

    for FILE in "${@}"
    do
        local FILE_TYPE=$(file "${FILE}")

        # How to get the compression type of the file?

        case "${FILE_TYPE}" in
            *bzip2) bunzip2 ${RECURSIVE} "${FILE}" ;;
            *gzip) gunzip ${RECURSIVE} "${FILE}" ;;
            *Zip) unzip ${RECURSIVE} ${FILE} ;;
            *compress) uncomprees ${RECURSIVE} ${FILE} ;;
            ?) echo "${FILE} cannot be extarcted" ;;
        esac

    done
}

所以根据$(file ${FILE})我需要检查Zip, bzip2, compress, gzip

这是正确的方法吗?(我不想使用外部工具,例如dtrx

编辑:例如,如果我有4个文件:

$(file -i archive) => archive: text/plain; charset=us-ascii
$(file -i archive.bz2) => archive.bz2: application/x-bzip2; charset=binary
$(file -i archvive.gz) =>archive.gz: application/x-gzip; charset=binary
$(file -i archive.cmpr) => archive.cmpr: application/x-compress; charset=binary

所以我需要分配给FILE_TYPE变量4个选项gzip,compress,bzip2,txt,然后在我的case语句中相应地匹配那些模式

吉尔·奎诺(Gilles Quenot)

我会怎么做:

#!/bin/bash

set -v
case $1 in
  *.tar)     tar xvf  "$1";;
  *.tgz)     tar zxvf "$1";;
  *.tar.gz)  tar zxvf "$1";;
  *.xz)      tar xJvf "$1";;
  *.gz)      gunzip   "$1";;
  *.zip)     unzip    "$1";;
  *.rar)     unrar x  "$1";;
  *tar.bz2)  tar xjvf "$1";;
  *.bz2)     bzip2 -d "$1";;
  *)  echo >&2 "unknow $1"
                   exit 1
  ;;
esac

可以使用file -i以下方法进行增强

case $(file -i "$1") in
    */x-bzip2*)    bzip2 -d "$1";;
    */gzip*)       gunzip   "$1";;
    */zip*)        unzip    "$1"";;
    */x-xz*)       tar xJvf "$1";;
    ?)             echo "File $1 cannot be extracted";;
esac

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解压缩命令说文件已损坏,但不是。如何解压缩ubuntu?

来自分类Dev

解压缩命令说文件已损坏,但不是。如何解压缩ubuntu?

来自分类Dev

如何解压缩“ .zip”文件?

来自分类Dev

如何解压缩该文件

来自分类Dev

如何解压缩文件

来自分类Dev

如何使用各种技术解压缩/解压压缩/归档的文件-zip,rar,gzip,tar

来自分类Dev

如何解压缩* .7z文件?

来自分类Dev

如何解压缩javascript中的gzip文件?

来自分类Dev

如何解压缩霍夫曼编码的文件?

来自分类Dev

如何解压缩文件中的值

来自分类Dev

如何解压缩加密的.enz文件

来自分类Dev

如何解压缩* .7z文件?

来自分类Dev

如何解压缩Android应用中的文件?

来自分类Dev

如何解压缩InstallShield Cabinet文件?

来自分类Dev

如何解压缩xxx.js.tar文件

来自分类Dev

如何解压缩多个 zip 文件夹

来自分类Dev

如何解压缩 .bin.gz 文件?

来自分类Dev

如何解压缩,解压-xvf-在混乱的文件夹中解压缩?

来自分类Dev

解压缩(解压缩zip)文件显示错误,归档意外结束

来自分类Dev

如何解压缩.gz文件并将解压缩的文件保存到Python中的其他目录?

来自分类Dev

解压缩命令是归档而不是提取

来自分类Dev

解压缩命令是归档而不是提取

来自分类Dev

如何使用脚本下载和解压缩归档文件(如何可靠地指定已下载到后续命令的文件)?

来自分类Dev

在Mac OS X中,如何解压缩一个zip文件而不解压缩其内容?

来自分类Dev

如何解压缩已压缩两次的文件?

来自分类Dev

如何解压缩文件,更改csv表并再次压缩?

来自分类Dev

如何解压缩并打印压缩文本文件的最后几行?

来自分类Dev

如何“解压缩” zip文件?

来自分类Dev

如何“解压缩” ZIM文件?

Related 相关文章

  1. 1

    解压缩命令说文件已损坏,但不是。如何解压缩ubuntu?

  2. 2

    解压缩命令说文件已损坏,但不是。如何解压缩ubuntu?

  3. 3

    如何解压缩“ .zip”文件?

  4. 4

    如何解压缩该文件

  5. 5

    如何解压缩文件

  6. 6

    如何使用各种技术解压缩/解压压缩/归档的文件-zip,rar,gzip,tar

  7. 7

    如何解压缩* .7z文件?

  8. 8

    如何解压缩javascript中的gzip文件?

  9. 9

    如何解压缩霍夫曼编码的文件?

  10. 10

    如何解压缩文件中的值

  11. 11

    如何解压缩加密的.enz文件

  12. 12

    如何解压缩* .7z文件?

  13. 13

    如何解压缩Android应用中的文件?

  14. 14

    如何解压缩InstallShield Cabinet文件?

  15. 15

    如何解压缩xxx.js.tar文件

  16. 16

    如何解压缩多个 zip 文件夹

  17. 17

    如何解压缩 .bin.gz 文件?

  18. 18

    如何解压缩,解压-xvf-在混乱的文件夹中解压缩?

  19. 19

    解压缩(解压缩zip)文件显示错误,归档意外结束

  20. 20

    如何解压缩.gz文件并将解压缩的文件保存到Python中的其他目录?

  21. 21

    解压缩命令是归档而不是提取

  22. 22

    解压缩命令是归档而不是提取

  23. 23

    如何使用脚本下载和解压缩归档文件(如何可靠地指定已下载到后续命令的文件)?

  24. 24

    在Mac OS X中,如何解压缩一个zip文件而不解压缩其内容?

  25. 25

    如何解压缩已压缩两次的文件?

  26. 26

    如何解压缩文件,更改csv表并再次压缩?

  27. 27

    如何解压缩并打印压缩文本文件的最后几行?

  28. 28

    如何“解压缩” zip文件?

  29. 29

    如何“解压缩” ZIM文件?

热门标签

归档