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
这就是您的示例在没有“-”的情况下工作而没有“-”的原因