![是否有支持尾部操作的压缩格式?](https://linux22.com/image/561798/%E6%98%AF%E5%90%A6%E6%9C%89%E6%94%AF%E6%8C%81%E5%B0%BE%E9%83%A8%E6%93%8D%E4%BD%9C%E7%9A%84%E5%8E%8B%E7%BC%A9%E6%A0%BC%E5%BC%8F%EF%BC%9F.png)
我正在寻找一种支持tail
压缩的压缩格式。这意味着您不必读取整个文件即可获取最后 X 个未压缩的字节。使用 bzip2、xz、lzma 等格式是否可行?
我曾经使用 gzip 编写了一些可以实现这一点的代码。基本上,在非常高的层次上,它所做的就是将多个 gzip 块放在一起,然后我有一个实用程序可以从文件末尾向后搜索到最后一个块的开始位置。这些文件完全可以由标准 gzip 实用程序读取,但我希望有一些更标准化的实用程序可用。
这样做的最终目的是,我可以以压缩形式写出日志文件,然后能够对tail
它们进行操作(即使它们尚未完全写入;即流式传输),而不必等待从磁盘或网络读取整个内容。
答案1
gzip 有一个 --rsyncable 选项本质上是一样的。非标准部分将是支持 gzip 块的“ztail”实用程序,但似乎您已经处理过该问题了。
答案2
FWIW:我开发了一个命令行工具zlib 的雙然源代码为 gzip 文件创建索引:https://github.com/circulosmeos/gztool
它可以使用选项制作 gzip 文件的连续尾部-T
。或者只制作最后内容的尾部并停止-t
(还有许多其他可用选项)。
请注意,任何这些操作gztool
都会创建与该操作交错的索引文件。
索引可以随时中断,并在以后重新使用和/或完成。而且,由于gztool
只需命令即可从文件中的任何位置提取数据,并将创建与该操作交错的索引,因此使用它永远不会浪费时间。