Answers:
不幸的是,为了解压缩单个.tar.gz
存档文件,您必须处理整个存档,而您无能为力。
这是归档文件.zip
(和其他格式,例如.rar
)工作得更好的地方,因为zip
格式文件中包含所有文件的中央目录,并且直接偏移指向zip
文件的中间,因此可以快速提取归档文件成员而无需处理整个内容。
您可能会问,为什么处理.tar.gz
如此缓慢?
.tar.gz
(通常简称为.tgz
)只是通过.tar
压缩器gzip
压缩后存档。gzip
是只能使用一个文件的流式压缩器。如果你想获得的任何部分gzip
流,您需要解压缩它作为一个整体,这是真正杀死它.tar.gz
(和.tar.bz2
,.tar.xz
和其他类似的格式基础上.tar
)。
.tar
格式实际上非常非常简单。它只是一个512字节的文件或目录标头(名称,大小等)的流,每个标头后跟文件或目录的内容(如有必要,以0字节填充为512块大小)。当您观察到标题的总512块为空时,表示.tar
归档结束。
有些人认为,即使.tar
归档成员不能快速访问,但这不是很真实。如果.tar
存档中包含很少的大文件,则实际上您可以快速查找下一个标头,因此您可以在很少的查找中找到必要的存档成员(但仍然可能需要与存档成员一样多的查找)。如果您的.tar
归档文件包含许多小文件,这意味着即使未压缩也无法进行快速成员检索.tar
。
如果您仅从一个大型tar文件中提取一个文件,则说明您使用的是GNU tar
,并且可以保证tar文件从未附加到该文件中,那么您可以使用来显着提高性能--occurrence
。
此选项告诉tar一旦找到您所请求的每个文件的第一个匹配项,便立即停止。
tar xf large-backup.tar --occurrence etc/passwd etc/shadow
找到passwd
和的每个副本后,它不会在整个tarball中后台打印shadow
,而是停止。如果这些文件出现在末尾,则性能提升不会很大,但是,即使它们出现在500G文件的一半时,您也可以节省很多时间。
对于使用tar
单次备份而不使用真实磁带机的人们,这种情况可能是典型的情况。
请注意,您还可以传递--occurrence=NUMBER
以检索每个文件的第NUMBER个实例,如果您知道存档中有多个版本,这将很有帮助。默认情况下,该行为等于NUMBER
1的a。
--occurrence
可以在第一个文件上立即启动?我猜这是关于文件名的,所以例如aaaaa.jpg的东西会首先出现?
tar
继续在压缩包中搜索找到的文件的较新版本。而是如手册页所述返回the Nth occurrence
。如果指定一个在命令行上文件提取和你说--occurrence
那么焦油会尽快退出,因为它已经发现的文件,从而有效的阻止“第一个文件。”
处理大型tarball时:
--fast-read
仅提取与文件名操作数匹配的第一个存档条目,path/to/file
在这种情况下-在tarball中始终是唯一的
tar -xvf file.tgz --fast-read path/to/file
以上将搜索,直到找到匹配项,然后退出