为了说明这一点:我已经从公司网站下载了 LEDA 库。在其上使用 tar -xzf 失败:
$ tar -xzf LEDA-6.3-free-fedora-core-8-64-g++-4.1.2-mt.tar.gz
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
但是, gunzip 后跟 tar -xf 工作得很好:
$ gunzip LEDA-6.3-free-fedora-core-8-64-g++-4.1.2-mt.tar.gz
$ tar -xf LEDA-6.3-free-fedora-core-8-64-g++-4.1.2-mt.tar
# no error
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么会这样? - 我希望标准tar
命令一直有效。
der*_*ert 13
似乎发生的事情是他们对存档进行了双重压缩。
如果你运行file
你的 gunzip 文件,你会发现它仍然是一个 gzip 存档。如果您再次将其重命名为 .gz,则可以再次对其进行 gunzip。
似乎最近 gnu tar 会自动添加该-z
选项,前提是输入是一个文件。所以,这就是为什么它-z
在你已经运行gunzip
一次后没有选项的情况下工作, tar 自动添加它。
从信息页面记录了此行为:
“阅读压缩档案甚至更简单:您不需要指定任何其他选项,因为 GNU `tar' 会自动识别其格式。[...] 格式识别算法基于“签名”,这是一个特殊的字节序列文件的开头,特定于某些压缩格式。”
这是来自第 8.1.1 节“创建和阅读压缩档案”。