我只知道这种方法:
tar --full-time -tvf /path/to/file.tar.gz
但它会让 tar 扫描所有存档,如果存档很大,则非常耗时。我的问题是,也许有一种方法可以只扫描开头,只扫描某种类型的标题,就像 *.7z 或 *.rar 等其他格式一样?
答案1
最简洁的答案是不。”
7Zip
、RAR zip
、、等人。,都是双功能程序/文件格式。他们压缩单个文件,然后归档压缩结果。这会导致文件的某些部分不是压缩,但反过来又允许程序访问单个文件。
gzip
(.gz
部分)不同。它仅压缩单个字节流。字节流由 提供tar
。bzip2
( .bz2
) 做同样的事情,尽管使用不同的算法。tar
是归档程序,gzip
是压缩程序。为了完全到达存档,流必须第一的被解压。这只能通过经历整个文件。然后,也只有这样,才能tar
访问档案的各个部分。
您在这里看不到该gzip
步骤的原因是它已被内置tar
,而不是直接本身,但是tar
知道将其输出流通过管道传输到gzip
.
答案2
不,不可能。请参阅维基百科有关 tar 文件格式的说明。基本上,这只是一个交替序列文件头和文件内容。开头没有目录,每个文件的所有信息都在其目录中文件头。
标头包括文件大小,因此当仅列出内容时,读者可以通过查找下一个标头的开头来跳过读取所有内容块。但是,如果 tar 文件被压缩,则这是不可能的,因为它首先必须解压缩内容,以便它可以跳过适当数量的未压缩字节。