为什么 -z 不能作为 tar 使用的最后一个命令行选项?

为什么 -z 不能作为 tar 使用的最后一个命令行选项?
$ 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标志带有一个参数。

相关内容