我们正在开发一个传输资源非常有限的系统(在Linux上)。可以作为一个文件发送的最大文件大小已定义,我们希望发送最小数量的文件。因此,所有发送的文件都以GZip格式(.tar.gz)进行打包和压缩。
有许多不同类型的小文件(二进制文本,文本图像......)应该以最有效的方式打包,以便每次都发送最大量的数据。
问题是:有没有办法在不运行tar实用程序的情况下估计tar.gz文件的大小? (因此可以计算出最佳的文件组合)
答案 0 :(得分:3)
这取决于“小文件”的含义,但一般来说,不是。如果你的内容中有一个相对同质的大文件,那么你可以从中间压缩100K或200K,并使用该压缩率作为文件其余部分的估计值。
对于大约32K或更低的文件,您需要压缩它以查看它有多大。此外,当您在tar文件中连接许多小文件时,您将获得比单独使用小文件更好的压缩。
我建议使用一种简单的贪婪方法,即获取最大文件,其大小加上一些开销小于“最大文件大小”中的剩余空间。选择开销来覆盖焦油头和压缩的最大膨胀(百分之几)。然后将其添加到存档中。重复。
您可以在每一步冲洗压缩以查看结果有多大。
答案 1 :(得分:1)
是的,有一种方法可以在运行命令之前估算tar大小。
tar -czf - /directory/to/archive/ | wc -c
含义: 这将创建存档作为标准输出,并将其传递给wc命令,该命令将计算字节数。输出将是存档中的KB量。从技术上讲,它运行该工具但不保存它。
来源:The Ultimate Tar Command Tutorial with 10 Practical Examples