leetbacoon Asked: 2022-04-10 04:13:25 +0800 CST2022-04-10 04:13:25 +0800 CST 2022-04-10 04:13:25 +0800 CST 从磁带读取文件大小 772 我有一盘磁带,.tar.lzma里面有存档。如何按原样确定存档.tar.lzma的大小?换句话说,我正在寻找压缩存档的大小,而不是它存储的未压缩文件的大小——理想情况下,无需将存档从磁带复制到磁盘并从那里检查。.tar 有问题的磁带 (LTO-6)未使用任何特殊文件系统(例如 LTFS)进行格式化。 我的系统在 amd64 上使用 Debian 11 Bullseye,如果有必要提及的话。 linux tar 1 个回答 Voted Best Answer Marcus Müller 2022-04-10T04:28:47+08:002022-04-10T04:28:47+08:00 .tar.lzma 实际上只是一个通过lzma压缩器的 tar 文件,所以它内部是一个 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指出 如果“Uncompressed size”字段在所有64位中都包含1,则表示未压缩大小未知,并且流中有“end marker”,表示解码点的结束。 在相反的情况下,如果“未压缩大小”字段的值不等于 ((2^64) - 1),则必须在解码指定字节数(未压缩大小)后完成 LZMA 流解码。如果存在“结束标记”,LZMA 解码器也必须读取该标记。 所以,LZMA 是一个流解码器,它告诉你 您需要在生成 X 数据后停止解压缩数据,或者如果 X 为 2⁶⁴-1,当我告诉您“停止”时停止 因此,除了解压缩(丢弃解压缩的数据)之外,没有任何信息可用于了解压缩存档的长度。 (顺便说一句,我说tar的一个原因是存档格式不好。如果压缩是在存档容器内完成的,而不是围绕它进行压缩,这将不是问题。但这就是您的数据,所以本质上什么都没有你可以做的...)
.tar.lzma 实际上只是一个通过
lzma
压缩器的 tar 文件,所以它内部是一个 tar 并不重要。因此,lzma-file-format.txt包含解析该文件格式所需的所有信息;它以一个非常简单的标题开头:
…
1.1。标题
(每个
+---+
为一个字节,备注)所以,这里没有压缩大小信息!
你猜这是怎么回事。https://github.com/jljusten/LZMA-SDK/blob/master/DOC/lzma-specification.txt指出
所以,LZMA 是一个流解码器,它告诉你
因此,除了解压缩(丢弃解压缩的数据)之外,没有任何信息可用于了解压缩存档的长度。
(顺便说一句,我说
tar
的一个原因是存档格式不好。如果压缩是在存档容器内完成的,而不是围绕它进行压缩,这将不是问题。但这就是您的数据,所以本质上什么都没有你可以做的...)