我已经学会了使用不带“-”的 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 具有传统的归档器cpio
和tar
,但是很少有标志可以标准化,因为现有的实现差异太大,因此标准引入了一个新命令,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 兼容的命令行。