是否可以列出 *.tar.gz 文件中的所有文件而不扫描其全部内容?

是否可以列出 *.tar.gz 文件中的所有文件而不扫描其全部内容?

我只知道这种方法:

tar --full-time -tvf /path/to/file.tar.gz

但它会让 tar 扫描所有存档,如果存档很大,则非常耗时。我的问题是,也许有一种方法可以只扫描开头,只扫描某种类型的标题,就像 *.7z 或 *.rar 等其他格式一样?

答案1

最简洁的答案是不。”

7Zip、RAR zip、、等人。,都是双功能程序/文件格式。他们压缩单个文件,然后归档压缩结果。这会导致文件的某些部分不是压缩,但反过来又允许程序访问单个文件。

gzip.gz部分)不同。它仅压缩单个字节流。字节流由 提供tarbzip2( .bz2) 做同样的事情,尽管使用不同的算法。tar是归档程序,gzip是压缩程序。为了完全到达存档,流必须第一的被解压。这只能通过经历整个文件。然后,也只有这样,才能tar访问档案的各个部分。

您在这里看不到该gzip步骤的原因是它已被内置tar,而不是直接本身,但是tar知道将其输出流通过管道传输到gzip.

答案2

不,不可能。请参阅维基百科有关 tar 文件格式的说明。基本上,这只是一个交替序列文件头文件内容。开头没有目录,每个文件的所有信息都在其目录中文件头

标头包括文件大小,因此当仅列出内容时,读者可以通过查找下一个标头的开头来跳过读取所有内容块。但是,如果 tar 文件被压缩,则这是不可能的,因为它首先必须解压缩内容,以便它可以跳过适当数量的未压缩字节。

相关内容