Answers:
tar.gz文件没有索引。与zip或其他存档格式不同,要获取包含的文件或其他元数据的列表并不容易,也不便宜。为了向您显示存档中包含哪些文件,tar确实需要解压缩存档并解压缩文件,尽管在该-t
选项的情况下,它仅在内存中进行。
如果用例中的常见模式是列出归档文件中包含的文件,则您可能要考虑使用可以将文件索引添加到压缩文件中的归档文件格式,例如zip。
也许您还想看看HDF5格式以了解更复杂的情况。
我只是做了一些测试,以证明我的答案,并创造了一些目录,在他们许多文件和包装他们其中两个,tar czf files#.tgz files#
和zip -r files#.zip files#
。
对于测试,我每次都运行两次拆包命令,并获取第二次运行的结果,以避免测量磁盘速度。
目录files1
包含100,000个空文件。
$ time tar tzf files1.tgz >/dev/null
tar tzf files1.tgz > /dev/null 0,56s user 0,09s system 184% cpu 0,351 total
$ time unzip -l files1.zip >/dev/null
unzip -l files1.zip > /dev/null 0,30s user 0,34s system 99% cpu 0,649 total
拉链在这里比较慢。
目录files2
包含5,000个文件,每个文件具有512字节的随机数据。
$ time tar tzf files2.tgz >/dev/null
tar tzf files2.tgz > /dev/null 0,14s user 0,03s system 129% cpu 0,131 total
$ time unzip -l files2.zip >/dev/null
unzip -l files2.zip > /dev/null 0,03s user 0,06s system 98% cpu 0,092 total
仍然不能令人信服,但是这次的zip速度更快。
目录files3
包含5,000个文件,每个文件具有5kB的随机数据。
$ time tar tzf files3.tgz >/dev/null
tar tzf files3.tgz > /dev/null 0,42s user 0,03s system 111% cpu 0,402 total
$ time unzip -l files3.zip >/dev/null
unzip -l files3.zip > /dev/null 0,03s user 0,06s system 99% cpu 0,093 total
在此测试中,可以看出文件越大,tar列出它们就越困难。
对我来说,似乎zip引入了一些开销,您只会注意到许多非常小的(几乎为空)文件,而对于大量的较大文件,当列出存档中包含的文件时,它会赢得竞争。
-z
选项:tar -tvfz
。类似:如果您使用命令tar tvf而不是tar tvfz,会发生什么?