直接将压缩引擎指定给 tar 实际上是否比先进行 tar 处理然后进行压缩占用更少的中间磁盘空间?

直接将压缩引擎指定给 tar 实际上是否比先进行 tar 处理然后进行压缩占用更少的中间磁盘空间?

当我使用tar归档目录,然后使用例如单独压缩它时xz,我的系统上会出现三个文件 - dirdir.tardir.tar.xz。压缩完成后,dir.tar就会被删除,但似乎我仍然必须确保有足够的可用磁盘空间来容纳此设置中的所有三个文件。

当直接将压缩标志与 tar 一起使用时,会创建压缩文件而不需要可观察的.tar中间体,而且似乎我只需要等于目录和压缩文件的可用空间。

我最初假设 tar 存档可能是在压缩过程中一点一点地创建和删除的,但与此同时,我记得在某处读到过,整个 tar 存档需要在压缩之前创建。我看不到任何临时 tar 文件,无论是否隐藏。

使用带有压缩标志的 tar 是否实际上需要的可用磁盘空间比先使用 tar 然后使用压缩实用程序时更少?为什么/为什么不(可能是 tar+压缩标志所做的一步一步)?

答案1

是的,直接在命令中使用压缩标志tar(例如tar czf)将减少中间磁盘使用量,因为它不会创建任何临时的未压缩的 tar 文件,而是使用管道将 tar 的标准输出直接传递到压缩实用程序的标准输入。

根据管道在特定系统上的实现方式,tar可能看起来是在写入文件,但该文件实际上是一个 FIFO 队列,没有明显的空间消耗。

没有该标志时:
文件 > tar = 原始文件 + .tar 大小相同
.tar > gzip = .tgz = 原始文件 + .tar + .tgz
删除 .tar 之前的总磁盘使用量是原始文件的 2-3 倍,具体取决于压缩率。

使用标志:
文件> tar> gzip = 文件+ .tgz
最坏情况使用量是原始文件的 2 倍。

相关内容