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

时间:2010-04-26 08:59:33

标签: gzip tar

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

7 个答案:

答案 0 :(得分:55)

如果您想从命令行执行此操作,可以尝试 -l <​​/ strong>选项 gzip

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar

答案 1 :(得分:29)

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

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

输出以字节为单位。

说明:tar tzvfls -l等详细格式列出存档中的文件。 sedcut隔离文件大小字段。第二个sed在每个大小的前面放置一个+,除了第一个paste连接它们,给出一个和表达式然后由bc计算。

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

答案 2 :(得分:23)

如果文件大小超过2Gb,则命令gzip -l archive.tar.gz无效。我建议使用zcat archive.tar.gz | wc --bytes代替非常大的文件。

答案 3 :(得分:4)

使用以下命令:

tar -xzf archive.tar.gz --to-stdout|wc -c

答案 4 :(得分:3)

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

$ gzsize <your file>

答案 5 :(得分:2)

我在网上找到了所有网站,当文件大小超过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

肯定, 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 '{ sum += $1 } END { print sum }'
    6667023572

    real    0m1.005s
    user    0m0.013s
    sys     0m0.066s

答案 6 :(得分:-1)

tar文件是未压缩的,除非它通过其他程序过滤,例如gzip,bzip2,lzip,compress,lzma等.tar文件的文件大小与提取的文件相同,可能更少添加了1kb的标题信息,使其成为有效的tarball。