web-dev-qa-db-ja.com

tar cvfまたはtar -cvf?

tar cvfz dir.tar.gz Directory/のように、オプションに「-」なしでtarを使用する方法を学びましたが、最近は少し異なるtar -czvf構文に遭遇しました(この場合、「f」は最後のオプションであると思います)。

どちらもLinuxとMac OSで動作します。 '-'なしのouを使用した推奨構文はありますか?

24
ascobol

tarは、オプションの構文が標準化されていなかった時代の古いコマンドの1つです。 tarのすべての有用な呼び出しでは、ファイル名を指定する前に操作を指定する必要があるため、ほとんどのtar実装は、最初の引数が-で始まっていなくても、オプションとして解釈します。現在のほとんどの実装は-を受け入れます。私が知っている唯一の例外は Minix です。

古いバージョンのPOSIXおよびシングルUnixでは、操作指定子の前に-のないtarコマンドが含まれていました。単一のUnix v2には、従来のアーカイバ cpiotar の両方がありましたが、既存の実装があまりに異なるため、標準化できるフラグはほとんどないため、標準は新しいコマンド pax を導入しました。これは Single Unix v 以降、唯一の標準アーカイバです。標準準拠が必要な場合はpaxを使用しますが、多くのLinuxディストリビューションではベースインストールに含まれておらず、_ Minix にはpaxがないことに注意してください。実際に移植性が必要な場合は、tar cf filename.tarを使用してください。

私は恐竜かもしれませんが、-cvfの代わりにcvfを日常的に使用する方がおそらく移植性が高いと思います。ほとんどのLinuxディストリビューションはGNU tarを使用していると思います。* BSDも使用すると思いますが、以前使用されていた古いSysV tarをまだ使用している独自のUnixが見つかるでしょう必須オプションで-を使用しないでください。

私は-cvf(または-xfなど)を使用しておらず、Edge Arch Linuxの最新版でさえ問題ありません。

補足として、Sun標準のjarコマンドオプションを-の有無にかかわらず使用できると思います。

13
Bruce Ediger

現在のオプション標準に準拠していないプログラムは、UNIXにはほとんどありません。

1つはddですが、ddはIBMメインフレームプログラムDDR(ディスクダンプと復元)から派生しました。

1つはarで、もう1つはtarです。私の情報によると、tarはarに類似したいものでした。

すべてのtar実装は-なしで機能し、有用な実装では-を必要としません。したがって、移植可能なスクリプトを作成する場合は、SUSv2標準を確認し、SUSv2と互換性のあるコマンドラインのみを使用してください。

3
schily