在终端中无需解压即可查看 .tar.gz 档案的大小

在终端中无需解压即可查看 .tar.gz 档案的大小

我有一个 32GB 的 .tar.gz 档案,我想知道解压此压缩档案后文件的大小。我想先避免解压档案,然后使用例如du

是否也可以无需解压压缩文件即可了解所含文件的大小(在 Linux 和/或 MacOSX 系统上)?

对于另一个档案,我知道它也包含 .tar.gz 文件。是否还可以计算档案中包含的解压档案的大小?(例如,通过设置应模拟“解压”的级别?)

答案1

当然可以。只需使用-tv列出内容及其大小即可。例如

% tar -tvzf sometools2.tar.gz 
-rw-r--r-- madler/admin   3442 2005-02-27 21:40 pngdat.c
-rw-r--r-- madler/admin  24938 2005-02-27 21:39 infgen.c

如果您想要添加尺寸(如du),您可以使用awk

% tar -tvzf sometools2.tar.gz|awk '{ s += $3 } END { print s }'
28380

对于嵌入.tar.gz文件,当您找到它们时,您需要通过将它们发送到以下地址单独执行这些stdout操作-O

% tar -tvzf imbed.tar.gz 
-rw-r--r-- madler/staff    505 2012-02-12 00:06 lucas.c
-rw-r--r-- madler/staff  27913 2005-03-20 11:10 lzwtry.c
-rw-r--r-- madler/staff   8314 2005-02-27 21:42 sometools2.tar.gz
% tar -xOzf imbed.tar.gz sometools2.tar.gz | tar -tvzf - | awk '{ s += $3 } END { print s }'
28380

您可以编写一个脚本来在-tv输出中找到这些内容,然后提取它们,甚至可以递归执行。我将把这留给读者作为练习。

请注意,这些选项适用于 GNU tar,它在 Linux 和 Mac OS X 上都适用。BSD tar 的选项可能不同。

答案2

首先,你应该知道.tar.gz后缀表示它是一个压缩tar文件。tar只是将多个文件和目录打包成一个文件的一种方式。默认情况下,它没有任何压缩功能。这就是它的用武之地gzip。它是一个用于压缩单个文件的工具。因此,上述后缀表示它是文件和/或目录的压缩包。

如果你想查看压缩包中每个文件的压缩率,请参阅马克·阿德勒的回答

如果您只对整个压缩文件(或捆绑包)感兴趣,那么确定解压后大小的正确方法是:

gunzip -l ${file}

示例输出:

$ gunzip -l syslog.1.gz
     compressed        uncompressed  ratio uncompressed_name
        4465670            33295551  86.6% syslog.1

压缩和未压缩的数字显示字节数。因此,我的 syslog.1 文件未压缩时大约为 32 MB。

答案3

我不知道如何在终端上执行此类操作(据我所知这是不可能的)。但大多数用于提取档案的编程库也允许查询内容信息(例如树、内容大小),而无需提取整个压缩内容。

因此,您可以使用任何适合您需要的编程语言创建一个命令行工具,然后从命令行调用它。

相关内容