我需要维护日志文件的压缩存档。日志文件名是唯一的,归档文件一旦展开,就只是一个包含所有日志文件的目录。
当前的解决方案不能很好地扩展,因为它涉及一个gzip压缩文件。每次添加日志文件时,它们首先解压缩整个存档,添加文件并重新gzip。
是否有Unix归档工具可以添加到压缩归档而无需完全展开和重新压缩?或者,如果正确组合参数,gzip可以执行此操作吗?
答案 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
。