我有一盘磁带,上面写着一个.tar.lzma档案。如何确定存档的.tar.lzma的大小?换句话说,我希望找到压缩存档的大小,而不是它正在存储的未压缩.tar的大小--理想情况下,不需要将归档文件从磁带上复制到磁盘上并从那里进行检查。
所讨论的磁带(LTO-6)没有使用任何特殊的文件系统(如LTFS )进行格式化。
我的系统正在amd64上使用Debian11Bullseye,如果有必要的话。
发布于 2022-04-09 12:28:47
.tar.lzma实际上只是一个经过lzma压缩器的tar文件,所以它实际上并不重要。
因此,lzma-file-format.txt包含解析该文件格式所需的所有信息;它以一个令人惊讶的简单标题开头:
1. File Format
+-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+
| Header | LZMA Compressed Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+
The .lzma format file consist of 13-byte Header followed by
the LZMA Compressed Data.…
1.1。标题
+------------+----+----+----+----+--+--+--+--+--+--+--+--+
| Properties | Dictionary Size | Uncompressed Size |
+------------+----+----+----+----+--+--+--+--+--+--+--+--+(注:每个+---+是一个字节)
所以,这里没有压缩大小信息!
你猜这是怎么回事。https://github.com/jljusten/LZMA-SDK/blob/master/DOC/lzma-specification.txt指出
如果“未压缩大小”字段在所有64位中都包含未压缩大小,则表示未压缩大小未知,流中有“结束标记”,指示解码点的结束。相反的情况下,如果来自“未压缩大小”字段的值不等于(2^64)-1,则必须在解码指定字节数(未压缩大小)之后完成LZMA流解码。如果有“结束标记”,LZMA解码器也必须读取该标记。
因此,LZMA是一个流解码器,它告诉您
您需要在生成X数据之后停止解压缩数据,或者如果X是2⁶⁴-1,则在我告诉您“停止”时停止。
因此,除了解压缩(丢弃解压缩数据)之外,没有其他信息可以用来知道压缩存档的长度。
(顺便说一句,我说tar是一种糟糕的存档格式的原因之一。如果压缩是在归档容器内完成的,而不是围绕压缩容器,那么这将不是一个问题。但这就是你的数据,所以你根本就无能为力.
https://unix.stackexchange.com/questions/698589
复制相似问题