tar cvf 还是 tar -cvf?

tar cvf 还是 tar -cvf?

我已经学会了使用不带“-”的 tar 作为选项,tar cvfz dir.tar.gz Directory/但我最近遇到了略有不同的tar -czvf语法(我认为“f”必须是这种情况下的最后一个选项)。

两者都可以在 Linux 和 Mac OS 上运行。是否有推荐的语法(带或不带'-'),在unix风格中更可移植?

答案1

tar是选项语法尚未标准化时的古老命令之一。由于所有有用的调用都tar需要在提供任何文件名之前指定操作,因此大多数tar实现都会将其第一个参数解释为选项,即使它不以-.大多数当前的实现都接受-;我知道的唯一例外是迷你克斯

旧版本的 POSIX 和 Single Unix 包含一个在操作说明符之前tar没有的命令。 -Single Unix v2 具有传统的归档器cpiotar,但是很少有标志可以标准化,因为现有的实现差异太大,因此标准引入了一个新命令,pax,这是此后唯一的标准归档器单一 Unix v3。如果您想要符合标准,请使用pax,但要注意许多 Linux 发行版不将其包含在其基本安装中,并且pax没有迷你克斯。如果您希望在实践中具有可移植性,请使用tar cf filename.tar.

答案2

我可能是个恐龙,但我认为习惯性地使用cvf而不是-cvf可能更便携。我想大多数 Linux 发行版都使用 GNU tar,我猜 *BSD 也会这样做,但你会发现专有的 Unix 仍然使用旧的 SysV tar,它曾经要求你不要-在选项中使用 a 。

我不使用-cvf(或-xf其他什么),即使使用最先进的 Arch linux,我也没有遇到任何问题。

顺便说一句,我认为您也可以使用jar带或不带 a 的 Sun 标准命令选项-

答案3

UNIX 上很少有程序不遵循当前的选项标准。

一种是dd,但 dd 源自 IBM 大型机程序DDR(磁盘转储和恢复)。

一个是ar,另一个是tar。根据我的信息,tar 希望与 ar 类似。

所有 tar 实现都可以在没有 - 的情况下工作,并且没有有用的实现需要 -。因此,如果您想编写可移植脚本,请检查 SUSv2 标准并仅使用与 SUSv2 兼容的命令行。

相关内容