72

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

4

7 回答 7

72

这适用于任何文件大小:

zcat archive.tar.gz | wc -c

对于小于 4Gb 的文件,您还可以将-l选项与gzip一起使用:

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar
于 2010-04-30T12:15:31.710 回答
41

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

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

输出以字节为单位。

说明:tar tzvf以详细格式列出存档中的文件,例如ls -l. sedcut隔离文件大小字段。第二个sed在除第一个之外的每个大小前面都放了一个 + 并将paste它们连接起来,给出一个 sum 表达式,然后由bc.

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

于 2012-07-30T12:32:25.973 回答
31

该命令gzip -l archive.tar.gz不适用于大于 2Gb 的文件大小。我会推荐zcat archive.tar.gz | wc --bytes用于非常大的文件。

于 2013-04-11T17:39:19.163 回答
7

我知道这是一个旧答案;但两年前我为此编写了一个工具。它被调用gzsize,它为您提供 gzip 文件的未压缩大小,而无需实际解压缩磁盘上的整个文件:

$ gzsize <your file>
于 2016-10-25T17:18:27.650 回答
6

使用以下命令:

tar -xzf archive.tar.gz --to-stdout|wc -c
于 2013-06-02T23:45:52.280 回答
2

我在网上找到所有网站,当文件大小大于 4GB 时,无法解决这个问题。

首先,哪个最快?

[oracle@base tmp]$ time zcat oracle.20180303.030001.dmp.tar.gz | 厕所-c
    6667028480

    真正的 0m45.761s
    用户 0m43.203s
    系统 0m5.185s
[oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | 厕所-c
    6667028480

    真正的 0m45.335s
    用户 0m42.781s
    系统 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

    真正的 0m46.669s
    用户 0m44.347s
    系统 0m4.981s

绝对,tar -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 '{ 总和 += $1 } END { 打印总和 }'
    6667023572

    真正的 0m1.005s
    用户 0m0.013s
    系统 0m0.066s

于 2018-03-08T20:20:16.650 回答
-2

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

于 2011-06-06T09:02:38.490 回答