可附加的压缩存档

时间:2013-06-27 01:24:58

标签: unix compression append archive

我需要维护日志文件的压缩存档。日志文件名是唯一的,归档文件一旦展开,就只是一个包含所有日志文件的目录。

当前的解决方案不能很好地扩展,因为它涉及一个gzip压缩文件。每次添加日志文件时,它们首先解压缩整个存档,添加文件并重新gzip。

是否有Unix归档工具可以添加到压缩归档而无需完全展开和重新压缩?或者,如果正确组合参数,gzip可以执行此操作吗?

3 个答案:

答案 0 :(得分:2)

有一个可附加的压缩文件存档(与可附加的压缩存档不同)很容易。

tar可以选择将文件附加到存档的末尾(假设你有GNU tar)

 -r, --append
       append files to the end of an archive

您可以在添加到存档之前gzip日志文件,并可以使用较新的文件继续更新(追加)存档。

$ ls -l
foo-20130101.log
foo-20130102.log
foo-20130103.log
$ gzip foo*
$ ls -l
foo-20130101.log.gz
foo-20130102.log.gz
foo-20130103.log.gz
$ tar cvf backup.tar foo*gz

现在您有另一个日志文件要添加到存档中:

$ ls -l
foo-20130104.log
$ gzip foo-20130104.log
$ tar rvf backup.tar foo-20130104.log
$ tar tf backup.tar
foo-20130101.log.gz
foo-20130102.log.gz
foo-20130103.log.gz
foo-20130104.log.gz

答案 1 :(得分:0)

如果您不需要使用tar,我建议使用7-Zip。它有一个'添加'命令,我相信你做的就是你想要的。

参见相关的SO问题:Is there a way to add a folder to existing 7za archive?

此外,7-Zip文档:https://sevenzip.osdn.jp/chm/cmdline/commands/add.htm

答案 2 :(得分:0)

我正在为此使用zip -Zb(将文本日志逐步添加到压缩档案中):

  • 快速追加(索引位于存档末尾,可高效更新)
  • -Zb使用 bzip2 压缩方法,而不是 deflate 。在2018年,这似乎可以放心使用(您需要使用相当现代的unzip-请注意,某些工具在看到zip文件时确实会假设 deflate ,所以YMMV)
  • 7z是一个不错的选择:在同一操作中压缩所有文件时,压缩率比zip更好。但是,当您将文件一个一个地附加到归档文件(增量附加)时,压缩率仅比标准zip略高,并且类似于zip -Zb。因此,现在我坚持使用zip -Zb