我有压缩文件,我希望使用unix中的“less”实用程序查看。 “less”提供预处理选项,通过它我可以解压缩文件。但是,如果我想部分解压缩文件(作为预处理的一部分)并将输出直接/管道输入更少,该怎么办?这具有仅解压缩文件的一部分的优点。
如果有其他方法通过部分解压缩来查看压缩文件,请告诉我。
谢谢, 拉胡
答案 0 :(得分:1)
你需要为此提出自己的压缩格式;所有现有的库(gzip,bzip2,lzma)都是流式传输但没有分块(即你不能在压缩流中寻找)。
一种解决方案是创建一个类似ZIP存档的文件:一个条目流,后跟一个目录(TOC)。在您的情况下,条目(=块)在压缩之前都将具有相同的大小。
尝试4KB块大小;它仍然应该提供相当好的压缩,合理的开销和每个块的快速解压缩时间。将压缩块写入文件,并在TOC中记录每个压缩块的起始偏移量。
在流中搜索时,找到所需的4KB偏移量,从TOC读取偏移量,读取压缩块并解压缩。
[编辑] 您需要创建一个小工具,可以在存档中的任何位置开始解压缩,然后继续解压缩,直到达到EOF。但您可能想知道文件less
的哪个部分当前正在显示。没有简单的解决方案。 less
旨在显示流。它不能在那条小溪中“寻找”;而less
将在其可以寻找的某个地方创建一个缓冲区。如果你想避免这种情况(通常是因为文件太大),你必须编写自己的less
版本。
或者,查看less
的源代码。也许你可以用可以与解码器通信的东西替换代码的“缓冲输入”部分。