如何通过仅部分解压缩来查看压缩文件?

时间:2011-10-11 11:35:16

标签: shell unix

我有压缩文件,我希望使用unix中的“less”实用程序查看。 “less”提供预处理选项,通过它我可以解压缩文件。但是,如果我想部分解压缩文件(作为预处理的一部分)并将输出直接/管道输入更少,该怎么办?这具有仅解压缩文件的一部分的优点。

如果有其他方法通过部分解压缩来查看压缩文件,请告诉我。

谢谢, 拉胡

1 个答案:

答案 0 :(得分:1)

你需要为此提出自己的压缩格式;所有现有的库(gzip,bzip2,lzma)都是流式传输但没有分块(即你不能在压缩流中寻找)。

一种解决方案是创建一个类似ZIP存档的文件:一个条目流,后跟一个目录(TOC)。在您的情况下,条目(=块)在压缩之前都将具有相同的大小。

尝试4KB块大小;它仍然应该提供相当好的压缩,合理的开销和每个块的快速解压缩时间。将压缩块写入文件,并在TOC中记录每个压缩块的起始偏移量。

在流中搜索时,找到所需的4KB偏移量,从TOC读取偏移量,读取压缩块并解压缩。

[编辑] 您需要创建一个小工具,可以在存档中的任何位置开始解压缩,然后继续解压缩,直到达到EOF。但您可能想知道文件less的哪个部分当前正在显示。没有简单的解决方案。 less旨在显示流。它不能在那条小溪中“寻找”;而less将在其可以寻找的某个地方创建一个缓冲区。如果你想避免这种情况(通常是因为文件太大),你必须编写自己的less版本。

或者,查看less的源代码。也许你可以用可以与解码器通信的东西替换代码的“缓冲输入”部分。