由于即将进行发行版切换,我想备份我的主目录。但是,我的主目录有 29 GB。我想知道使用 压缩后会占用多少空间tar cvjf home.tar /home
。有什么方法可以确定压缩后的大小吗?
答案1
该工具tar
(bzip2
由于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
将告诉您文件的大小。实际(不完整)文件将较小,之后您应该将其删除。
使用tar
with时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 之间。