我们正在开发一个传输资源非常有限的系统(在Linux上).可以作为一个文件发送的最大文件大小已定义,我们希望发送最小数量的文件.因此,所有发送的文件都以GZip格式(.tar.gz)打包和压缩.
有许多不同类型的小文件(二进制文本,文本,图像......)应该以最有效的方式打包,以便每次都发送最大量的数据.
问题是:有没有办法在不运行tar实用程序的情况下估计tar.gz文件的大小?(因此可以计算出最佳的文件组合)
小智 8
是的,有一种方法可以在运行命令之前估计 tar 大小。
tar -czf - /directory/to/archive/ | wc -c
Run Code Online (Sandbox Code Playgroud)
含义:这将创建存档作为标准输出,并将其通过管道传输到 wc 命令,这是一个计算字节数的工具。输出将是存档中的 KB 量。从技术上讲,它运行该工具但不保存它。
这取决于“小文件”的含义,但通常不是。如果您有一个内容相对同质的大文件,那么您可以从中间压缩 100K 或 200K,并使用该压缩率作为文件其余部分的估计值。
对于 32K 左右或更少的文件,您需要对其进行压缩以查看其大小。此外,当您在一个 tar 文件中连接许多小文件时,您将获得比单独对小文件进行更好的压缩。
我会推荐一种简单的贪婪方法,您采用最大的文件,其大小加上一些开销小于“最大文件大小”中的剩余空间。选择开销来覆盖 tar 标头和压缩的最大扩展(百分之几)。然后将其添加到存档中。重复。
您可以在每个步骤中刷新压缩,看看结果有多大。