为什么 `tar -xvfz` 失败,但 `tar xvfz` 有效?

anu*_*anu 43 linux tar

tar -xvfz foo.tar.gz 返回错误 tar: z: Cannot open: No such file or directory

这是完全可以理解的——f开关需要一个文件名,所以需要放在最后。

但是,省略连字符tar xvfz foot.tar.gz可以解压缩和解压文件。

我已经在 OS X 10.8 和 Ubuntu 12.04 上测试过了。

任何想法为什么?

[编辑添加]

我总是使用tar -zxvf foo.tar.gz. 然而,这个问题是因为这个 xkcd而出现的,当有人坚持认为这tar xvfz会奏效时,我感到很惊讶。

在此处输入图片说明

Nap*_*r_X 63

tar 有 3 种语法类型(根据this):

  • 长选项(--file)
  • 短选项 (-f)
  • 旧选项 (f)

对于旧的选项语法,所有字母都必须跟在“tar”之后,并且必须全部落入一个没有空格的单丛中。字母的顺序并不重要,只要这些字母的参数在选项组之后遵循相同的顺序即可。

这种编写 tar 选项的旧方式甚至会让有经验的用户感到惊讶。例如,两个命令:

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file
Run Code Online (Sandbox Code Playgroud)

是完全不同的。第一个示例使用“archive.tar.gz”作为选项“f”的值并识别选项“z”。然而,第二个示例使用 'z' 作为选项 'f' 的值 - 可能不是预期的。

保留旧选项是为了与旧版本的 tar 兼容。

带有“-”的命令相当于

tar -czf archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file
Run Code Online (Sandbox Code Playgroud)

这就是您的示例在没有“-”而不是“-”的情况下工作的原因

  • 跆拳道 unix (3认同)