web-dev-qa-db-ja.com

-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
$
7
Lazer

-f switchは引数(ファイル名)を取ります。 zfの後に表示される場合、それがファイル名と見なされます。

tar -xvfz one.tar.gz

と同じです

tar -xvf z one.tar.gz

これを行った場合:

tar -xvf -z one.tar.gz

次に-zがファイル名として使用され、同様のエラーが発生します。

ただし、これは機能します。

tar -xvz -f one.tar.gz

GNU tar man page 状態:

Tarの最初の引数は、オプションの1つである必要があります。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*

z最後に使用できます:

tar -x -v -f foo.tar.gz  -z

しかし、@ Dennisが述べているように、fフラグは引数を取ります。

6
user31752