4

我有一个.bz2文件。我想列出前 10 行或后 10 行而不解压缩它,因为它太大了。我尝试了head -10ortail -10但我看到了乱码。我还需要比较两个压缩文件以检查它们是否相似。如何在不解压缩文件的情况下实现这一点?

编辑:相似意味着相同(具有相同的内容)。

4

2 回答 2

10

虽然bzip2是基于块的压缩算法,所以理论上你可以找到你想要解压缩的特定块,但这会很复杂(例如,如果你最终想要看到的最后十行实际上跨越两个或更多压缩块怎么办?) .

要回答您的直接问题,您可以这样做,这实际上会解压缩整个文件,因此在某种意义上是浪费的,但它不会尝试将该文件存储在任何地方,因此您不会遇到存储容量问题:

bzcat file.bz2 | head -10
bzcat file.bz2 | tail -10

如果您的发行版不包括bzcat(根据我的经验,这有点不寻常),bzcat则相当于bzip2 -d -c.

但是,如果您的最终目标是比较两个压缩文件(可能已在不同级别压缩,因此直接比较实际压缩文件不起作用),您可以这样做(假设bash您的 shell):

cmp <(bzcat file1.bz2) <(bzcat file2.bz2)

这将解压缩两个文件并逐字节比较未压缩的数据,而无需将任何一个解压缩文件存储在任何地方。

于 2013-02-08T15:31:21.513 回答
0

普通的标准bunzip2命令不能做到这一点。但是,手册页说 bzip2 在 900 KB 的块中工作,并提到bzip2recover这是一个可以解压缩单个块的程序。

使用这些知识,您应该能够从所需文件中截取第一个和最后一个 900 KB(左右)的内容,然后使用 bzip2recover 解压缩这些内容。

于 2013-02-08T14:13:34.190 回答