Gzip 压缩前估计.tar.gz文件的大小

Gzip 压缩前估计.tar.gz文件的大小,gzip,Gzip,我们正在开发一个传输资源非常有限的系统(在Linux上)。定义了可以作为一个文件发送的最大文件大小,我们希望发送最小数量的文件。因此,所有发送的文件都以GZip格式(.tar.gz)打包和压缩 有许多不同类型的小文件(二进制文件、文本文件、图像文件等),它们应该以最有效的方式打包,以便每次发送最大数量的数据 问题是:有没有一种方法可以在不运行tar实用程序的情况下估计tar.gz文件的大小?(因此可以计算出文件的最佳组合)这取决于您所说的“小文件”是什么意思,但一般来说,不是。如果您有一个内容相

我们正在开发一个传输资源非常有限的系统(在Linux上)。定义了可以作为一个文件发送的最大文件大小,我们希望发送最小数量的文件。因此,所有发送的文件都以GZip格式(.tar.gz)打包和压缩

有许多不同类型的小文件(二进制文件、文本文件、图像文件等),它们应该以最有效的方式打包,以便每次发送最大数量的数据


问题是:有没有一种方法可以在不运行tar实用程序的情况下估计tar.gz文件的大小?(因此可以计算出文件的最佳组合)

这取决于您所说的“小文件”是什么意思,但一般来说,不是。如果您有一个内容相对同质的大文件,那么您可以从中间压缩100K或200K,并使用该压缩比作为对文件其余部分的估计

对于32K或更少的文件,您需要对其进行压缩以查看其大小。此外,当您将许多小文件连接到一个tar文件中时,总体压缩效果将优于单独对小文件进行压缩

我建议使用一种简单的贪婪方法,即取最大的文件,其大小加上一些开销小于“最大文件大小”中的剩余空间。选择开销来覆盖tar头和压缩带来的最大扩展(百分比的一小部分)。然后将其添加到存档中。重复一遍


您可以在每一步刷新压缩以查看结果有多大。

是的,有一种方法可以在运行命令之前估计tar大小

tar -czf - /directory/to/archive/ | wc -c 
意思是: 这将把归档文件创建为标准输出,并通过管道将其传输到wc命令,这是一个计算字节数的工具。输出将是存档中的KB量。从技术上讲,它运行该工具,但不保存它


来源:

我所说的最大文件大小是64 KB,所以小文件的大小可能在10 KB左右(有些大,有些小)。目前我正在生成64KB的文件包,然后对它们进行压缩,所以如果是文本,我会得到大约10KB的压缩文件(我现在没有压缩文件,所以我可能有点错,但大约是这些数字);其他人则不然。有些文本压缩得比其他文本好
tar
头块往往包含大量的零字节,因此压缩效果很好。这取决于你想变得多么聪明——你愿意花费多少CPU资源来处理大小和带宽。考虑到文件大小限制为64 KiB,采取保守的估计,例如“我没有看到比6:1更糟糕的压缩,所以我最多假设为5:1”,尝试在文件中使用320 KiB的原始数据,并在浪费少量空间的情况下生活,祈祷结果永远不会超过64 KiB。