代码之家  ›  专栏  ›  技术社区  ›  Ztyx

检查tar gz文件的总内容大小

  •  44
  • Ztyx  · 技术社区  · 16 年前

    如何从命令行提取.tar.gz文件中未压缩文件总数据的大小?

    7 回复  |  直到 16 年前
        1
  •  54
  •   Matthew Mott    16 年前

    如果要从命令行执行此操作,可以尝试 -L 选择 GZIP :

    $ gzip -l compressed.tar.gz
         compressed        uncompressed  ratio uncompressed_name
                132               10240  99.1% compressed.tar
    
        2
  •  28
  •   Peter Berry Ztyx    13 年前

    这将汇总提取文件的总内容大小:

    $ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc
    

    输出以字节为单位。

    说明: tar tzvf 以详细格式列出存档中的文件,如 ls -l sed cut 隔离文件大小字段。第二个 塞德 在除第一个和 paste 连接它们,给出一个求和表达式,然后由 bc .

    请注意,这不包括元数据,因此提取文件时文件所占用的磁盘空间将更大-如果有很多非常小的文件,可能会大很多倍。

        3
  •  23
  •   swdev Jonathan Leffler    13 年前

    命令 gzip -l archive.tar.gz 文件大小超过2GB时无法正常工作。我建议你 zcat archive.tar.gz | wc --bytes 而不是大文件。

        4
  •  4
  •   elec3647    13 年前

    使用以下命令:

    tar -xzf archive.tar.gz --to-stdout|wc -c
    
        5
  •  3
  •   bfontaine cat-walk    7 年前

    我知道这是一个古老的答案;但两年前我就为这个写了一个工具。它叫 gzsize 它为您提供了一个gzip文件的未压缩大小,而实际上没有在磁盘上解压缩整个文件:

    $ gzsize <your file>
    
        6
  •  2
  •   RaZieRSarE    8 年前

    我在网上找到了所有的站点,但并没有解决这个问题,即当文件大小大于4GB时获取大小。

    首先,哪一个最快?

    [oracle@base tmp]$ time zcat oracle.20180303.030001.dmp.tar.gz | wc -c
        6667028480
    
        real    0m45.761s
        user    0m43.203s
        sys     0m5.185s
    
    [oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c
        6667028480
    
        real    0m45.335s
        user    0m42.781s
        sys     0m5.153s
    
    [oracle@base tmp]$ time tar -tvf oracle.20180303.030001.dmp.tar.gz
        -rw-r--r-- oracle/oinstall 111828 2018-03-03 03:05 oracle.20180303.030001.log
        -rw-r----- oracle/oinstall 6666911744 2018-03-03 03:05 oracle.20180303.030001.dmp
    
        real    0m46.669s
        user    0m44.347s
        sys     0m4.981s
    

    一定地, 焦油-XVF 是最快的,但是 _?如何在获取头之后取消执行?

    我的解决办法是 :

    [oracle@base tmp]$  time echo $(timeout --signal=SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{print $3}') | grep -o '[[:digit:]]*' | awk '{ sum += $1 } END { print sum }'
        6667023572
    
        real    0m1.005s
        user    0m0.013s
        sys     0m0.066s
    
    
        7
  •  -1
  •   Tom S    15 年前

    tar文件将被解压缩,直到/除非它被另一个程序过滤,如gzip、bzip2、lzip、compress、lzma等。tar文件的文件大小与提取的文件大小相同,可能添加的头信息少于1KB,使其成为有效的tarball。