$ ls one.tar.gz
one.tar.gz
$ tar -xvfz one.tar.gz
tar: z: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
$ tar -xvzf one.tar.gz
one
$ tar -xzvf one.tar.gz
one
$ tar -zxvf one.tar.gz
one
$
答案1
此-f
开关带有一个参数(文件名)。如果z
出现在之后,f
则将其视为文件名。
tar -xvfz one.tar.gz
是相同的
tar -xvf z one.tar.gz
如果你这样做了:
tar -xvf -z one.tar.gz
然后-z
就会被视为文件名,并且你会得到类似的错误。
然而,这样做是可行的:
tar -xvz -f one.tar.gz
这GNUtar
手册页状态:
tar 的第一个参数必须是以下选项之一:Acdrtux,后面跟着任何可选函数。tar 的最后一个参数是应存档的文件或目录的名称。
请注意,除非输入来自 stdin 或输出到 stdout(在适当的情况下),否则-f filename
必须给出选项和参数。虽然手册页暗示顺序是固定的,但实际上选项可以按任何顺序排列。即使是这个奇怪的选项也可以工作(但它可能不适用于所有版本tar
):
tar -v files_to_archive* -f xyz.tar.gz -cz
为了可移植性,最好坚持惯用的参数顺序,甚至省略连字符:
tar czvf xyz.tar.gz files_to_archive*
答案2
是可以最后使用:
tar -x -v -f foo.tar.gz -z
但正如@Dennis所说,F标志带有一个参数。