提取前从 tgz 获取提取文件的大小

提取前从 tgz 获取提取文件的大小

是否可以在不提取 tgz 文件的情况下获取其提取后占用的大小?我基本上想要

tar tzf 文件.tgz
旁边是大小。我真正想要的是总数,因此给出总大小而不是具体文件大小的解决方案是可行的。

答案1

如果它使用 gzip 压缩,您可以执行以下操作:

gunzip -l filename.tar.gz

由于 tar 未经过压缩,因此它应该会为您提供所需的信息。

答案2

嗯我更喜欢这样:

tar vtzf somefile.tar.gz |awk '{SUM += $3} END {print SUM}'

答案3

zcat file.tgz | wc -c

将为您提供未压缩的 .tar 文件占用的字符数,这将非常接近正确值。

答案4

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

首先,哪个最快?

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

    实际 0 分 45.761 秒
    用户 0m43.203s
    系统 0分5.185秒
[oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c
    6667028480

    实际 0m45.335s
    用户 0m42.781s
    系统 0 分 5.153 秒
[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

    实际 0分46.669秒
    用户 0m44.347s
    系统 0 分 4.981 秒

确实,焦油-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

相关内容