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

Zty*_*tyx 50 gzip tar

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

小智 60

如果要从命令行执行此操作,可以尝试gzip-l选项:

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,报告的未压缩大小是模2 ^ 32,这意味着这不适用于大于4GB的文件.请改用此命令:`zcat archive.tar.gz | wc -c` (34认同)
  • 谢谢@nedned。我想知道为什么一个 2.9Gb 的 tar.gz 充满文本数据文件报告 -36% 的压缩率 o_O。这似乎是一个愚蠢的错误。 (3认同)
  • 这给了我tar文件的大小,包括文件元数据,如文件名等.我正在寻找一种方法来只检查文件的总大小.无论如何,这样做的唯一方法似乎是提取tar文件并在提取的内容上运行脚本. (2认同)
  • 就我而言,这给了我一个小于压缩和负比率的解压缩大小。 (2认同)

Zty*_*tyx 32

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

$ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc
Run Code Online (Sandbox Code Playgroud)

输出以字节为单位.

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

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

  • 或者更简洁一点:`tar tzvf archive.tar.gz | awk'{s + = $ 3} END {print(s/1024/1024),MB}'`. (23认同)

swd*_*dev 24

gzip -l archive.tar.gz文件大小超过2Gb时,该命令无法正常工作.我会建议zcat archive.tar.gz | wc --bytes使用非常大的文件.

  • gzip规范(https://www.ietf.org/rfc/rfc1952.txt)表示ISIZE字段应该是模2 ^ 32的原始文件大小,不确定为什么gzip使用signed int ... (6认同)
  • 我相信 `gzip -l` 不适用于大于 **4GB** 的文件大小,因为 gzip 仅使用 4 个字节来存储原始文件大小。 (2认同)

bfo*_*ine 7

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

$ gzsize <your file>
Run Code Online (Sandbox Code Playgroud)


小智 5

使用以下命令:

tar -xzf archive.tar.gz --to-stdout|wc -c
Run Code Online (Sandbox Code Playgroud)