使用列表参数估计压缩文件大小

使用列表参数估计压缩文件大小

我目前正在压缩目录中以下格式的文件列表:

tar -cvjf test_1.tar.gz -T test_1.lst --no-recursion

上述命令将仅压缩列表中提到的文件。我这样做是因为此列表的生成方式使其适合 DVD。但是,在压缩过程中,压缩率会降低估计的文件大小,并且 DVD 中会剩余充足的空间。这有点像背包算法。

我想估计压缩文件的大小并将更多文件添加到列表中。我发现可以使用以下命令来估计文件大小:

tar  -cjf - Folder/ | wc -c

此命令不接受列表参数。有没有办法估算压缩文件的大小?我也在研究诸如 perl 脚本等选项。

答案1

压缩率很大程度上取决于所压缩文本的重复性。如果您的文件都是纯文本,而且都非常相似,那么您将获得很好的压缩率,如果文件不同,压缩率就会开始下降。如果文件已经压缩(例如 JPG、MP3 等),那么压缩率会更低。

正如您在“背包”算法中所暗示的那样,如果有足够的时间和 CPU 资源,应该可以尝试单个压缩 tar 文件中所有文件的组合。不幸的是,这可能需要太长时间。

假设您的文件相似(即,所有文件大部分都是文本,或者都是相似的文件),那么您可能能够通过单独压缩每个文件然后将大小加在一起来估算总压缩 tar 存档的大小。

唯一的缺点是,如果文件相似,则估计将失败并产生较小的最终 tar.bz2 文件,并且压缩算法可以利用相似性来发挥其优势。

相关内容