有没有办法估计用 tar 和 bzip2 压缩后给定大小的文件或目录将占用多少空间?

有没有办法估计用 tar 和 bzip2 压缩后给定大小的文件或目录将占用多少空间?

由于即将进行发行版切换,我想备份我的主目录。但是,我的主目录有 29 GB。我想知道使用 压缩后会占用多少空间tar cvjf home.tar /home。有什么方法可以确定压缩后的大小吗?

答案1

该工具tarbzip2由于j您使用而隐式涉及)通过管道传输到wc(这是用于计数字节的标准(POSIX)工具)。以下命令将打印字节大小:

tar cj /home | wc -c

该命令确实(我在这里引用另一个答案)“完成压缩程序的所有工作,而无需写入最终的档案,这会浪费时间”;但如果你真的想知道那么这是唯一坚定的方法。


您可以像这样改进整体方法:

tar cj /home | tee home.tbz2 | wc -c
  • 如果您很幸运并且您拥有的空间home.tbz2足够那么您将不会收到任何错误tee并且文件最终的大小将等于wc -c报告的大小。
  • 否则tee将报告no space left,但它将继续写入其标准输出。wc -c将告诉您文件的大小。实际(不完整)文件将较小,之后您应该将其删除。

使用tarwith时v,您可能会错过no space left消息。但您仍可以通过比较从 获得的输出wc -c与 的实际大小来了解发生了什么。在 Bash 中,您可以检索withhome.tbz2的退出状态。tee${PIPESTATUS[1]}

答案2

不幸的是,没有。查看压缩档案有多大的唯一方法是创建压缩档案。没有工具可以做到这一点,因为该工具会完成压缩程序的所有工作,而无需编写最终档案,这会浪费时间。

也许您应该考虑将数据分成可管理的块并创建多个存档。这样您就可以将存档 29 GB 所需的大量时间分成更小的部分。

答案3

如果不实际压缩数据,就不可能确切知道数据会压缩到多大。您可以根据主目录中的内容进行有根据的猜测。我不知道有什么工具可以自动执行此操作,但这不是一个困难的过程。

许多现代文件格式已经经过压缩,这意味着再次压缩将不会给您带来任何好处(或带来负面影响)。对于这种类型的数据,您最好跳过压缩,直接复制或按原样存档。例如压缩视频(mp4、webm、mov 等)、压缩图像(jpeg、png 等)、现有档案(zip、rar、gz、bz2 等)等等。

文本文件通常压缩效果相当好,尤其是当有大量重复数据(即日志文件)时。您可以尝试对文件子集进行采样,以查看它们的压缩效果,并以此作为猜测,或者使用 50% 之类的粗略估计。

最后,查看数据中每种类型的占比,然后乘以估算的百分比,即可估算出最终大小。例如,如果 20GB 的数据是压缩数据,9GB 是文本文件,则最终压缩数据大小可能在 21GB 到 25GB 之间。

相关内容