在终端中找出 .tar.gz 存档的大小,无需解压

Sve*_*ven 5 terminal gzip tar archiving

我有一个 32GB 的 .tar.gz 存档,如果我解压这个压缩存档,我想知道文件的大小。我想避免首先解压存档,而不是使用例如du

是否也可以在不解压压缩档案的情况下找出所包含文件的大小(在 Linux 和/或 MacOSX 系统上)?

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

Mar*_*ler 4

当然。只需用于-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
Run Code Online (Sandbox Code Playgroud)

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

% tar -tvzf sometools2.tar.gz|awk '{ s += $3 } END { print s }'
28380
Run Code Online (Sandbox Code Playgroud)

对于嵌入.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
Run Code Online (Sandbox Code Playgroud)

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

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