なぜ `tar -xvfz`が失敗するのに、` tar xvfz`は機能するのですか?


41

tar -xvfz foo.tar.gz エラーを返します tar: z: Cannot open: No such file or directory

これは完全に理解できfます。スイッチはファイル名を想定しているため、最後にする必要があります。

ただし、ハイフンの省略はtar xvfz foot.tar.gz機能し、ファイルを圧縮解除および解凍します。

これをOS X 10.8およびUbuntu 12.04でテストしました。

なぜアイデアがありますか?

[追加して編集]

私は常に使用しますtar -zxvf foo.tar.gz。しかし、このxkcdが原因でこの疑問が生じましたtar xvfz。誰かがそれが機能すると主張したときの私の驚きです。

ここに画像の説明を入力してください


12
ごめんなさい:xkcd.com/1168
MichaelHouse

回答:


61

タールは(に応じて構文の3種類あり、これを):

  • 長いオプション(--file)
  • 短いオプション(-f)
  • 古いオプション(f)

古いオプション構文の場合、すべての文字は「tar」の後に続く必要があり、すべてスペースなしの単一のまとまりに分類される必要があります。オプションの束の後、それらの文字に対する引数が同じ順序に従う限り、文字の順序は実際には重要ではありません。

tarオプションを記述するこの古い方法は、経験豊富なユーザーであっても驚く可能性があります。たとえば、2つのコマンドは次のとおりです。

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file

まったく違います。最初の例では、オプション「f」の値として「archive.tar.gz」を使用し、オプション「z」を認識します。ただし、2番目の例では、オプション 'f'の値として 'z'が使用されますが、これはおそらく意図したものではありません。

古いオプションは、古いバージョンのtarとの互換性のために保持されます。

「-」の付いたコマンドは次と同等です

tar -czf archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file

これが、「-」なしではなく「-」なしでサンプルが機能する理由です。


3
wtf
BlueRaja
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.