为什么`tar -xvfz`失败,但是`tar xvfz`起作用?


41

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这行得通时,我感到惊讶。

在此处输入图片说明


12
很抱歉:xkcd.com/1168
MichaelHouse

Answers:


61

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

  • 长选项(-文件)
  • 短选项(-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

这就是您的示例不使用“-”而不使用“-”的原因


3
WTF UNIX
BlueRaja
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.