我正在使用zip -Zb它(将文本日志增量附加到压缩存档):
-Zb使用bzip2压缩方法而不是deflate。在 2018 年,这似乎可以安全使用(你需要一个相当现代的unzip工具——注意一些工具在看到 zip 文件时确实会假设放气,所以 YMMV)7z是一个很好的候选者:当您在同一操作中压缩所有文件时,压缩率比 zip 好得多。但是,当您将文件一个接一个地追加到存档中(增量追加)时,压缩率仅比标准 zip 稍好一些,并且与zip -Zb. 所以现在我坚持使用zip -Zb.为了澄清发生的情况以及为什么在末尾添加索引对于“可附加”归档格式(条目单独压缩)很有用:
\n\nBefore:\n############## ########### ################# #\n[foo1.png ] [foo2.png ] [foo3.png ] ^\n |\n index\n\nAfter:\n############## ########### ################# ########### #\n[foo1.png ] [foo2.png ] [foo3.png ] [foo4.png ] ^\n |\n new index\nRun Code Online (Sandbox Code Playgroud)\n\n所以这不是fopen在append模式中,但大概是fopen在write模式中,然后fseek,然后write(这是我的心理模型,有人让我知道这是否是错误的)。我不能 100% 确定它实际上会如此简单,它可能取决于操作系统和文件系统(例如,带有快照的文件系统可能对如何处理一个文件末尾的小写入有非常不同的看法)文件\xe2\x80\xa6巨大的“YMMV”在这里\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f)
拥有压缩文件的可附加存档相当容易(尽管与可附加压缩存档不同)。
tar可以选择将文件附加到存档的末尾(假设您有 GNU tar)
-r, --append
append files to the end of an archive
Run Code Online (Sandbox Code Playgroud)
您可以在添加到存档之前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
Run Code Online (Sandbox Code Playgroud)
现在您有另一个日志文件要添加到存档中:
$ 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
Run Code Online (Sandbox Code Playgroud)