为什么“tar -xvfz”会失败,而“tar xvfz”可以工作?

为什么“tar -xvfz”会失败,而“tar xvfz”可以工作?

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。然而,这个问题的出现是因为这个xkcdtar xvfz,当有人坚持认为这样做可行时,我感到很惊讶。

在此处输入图片描述

答案1

tar 有 3 种语法(根据):

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

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

这种编写 tar 选项的老方法甚至会让经验丰富的用户感到惊讶。例如,以下两个命令:

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file

完全不同。第一个例子使用“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

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

相关内容