tar 使用短格式选项与旧格式选项

tar 使用短格式选项与旧格式选项

在的 GNU 手册中tar,有以下示例显示选项的顺序很重要:

tar -cfv collection.tar blues folk jazz

在这种情况下,由于v位于 之后f,因此 tar 存档将被命名为“v”,并且如果当前目录中存在tar,它将尝试添加collection.tar到存档中。但如果我从开头省略,那么尽管位于 之后,-该命令仍会按我们想要的方式运行。为什么?vf

答案1

因为不同的期权风格有不同的工作方式和不同的行为方式。


手册页指出UNIX 或短选项风格,以单个破折号为前缀的那个。

任何数量的不带参数的选项都可以聚集在一个破折号后面,例如 -vkp。带参数的选项(无论是强制的还是可选的)可以出现在这种集群的末尾,例如 -vkpf a.tar。


传统风格 选项风格,没有破折号的那个:

在传统样式中,第一个参数是一组选项字母,所有后续参数都为需要它们的选项提供参数。参数的读取顺序与选项字母的读取顺序相同。处理完所有选项后剩下的任何命令行词都被视为非可选参数:文件或档案成员名称。


正如您所看到的,UNIX 或短选项风格期望选项的参数直接位于选项之后。
传统风格 选项风格期望以正确的顺序提供一组选项和适合选项的参数。

答案2

其中有明确描述man tar

期权风格

   Options to GNU tar can be given in three different styles.  In
   traditional style, the first argument is a cluster of option
   letters and all subsequent arguments supply arguments to those
   options that require them.  The arguments are read in the same
   order as the option letters.  Any command line words that
   remain after all options has been processed are treated as
   non-optional arguments: file or archive member names.

   For example, the c option requires creating the archive, the v
   option requests the verbose operation, and the f option takes
   an argument that sets the name of the archive to operate upon.
   The following command, written in the traditional style,
   instructs tar to store all files from the directory /etc into
   the archive file etc.tar verbosely listing the files being
   archived:

   tar cfv a.tar /etc

因此在这种情况下:

tar cfv collection.tar blues folk jazz

collection.tar是的参数fblues folk jazz其余参数被视为档案成员名称。

相关内容