tarの引数の順序は重要ですか? [コピー]

tarの引数の順序は重要ですか? [コピー]

私はLinuxを学んでいます。私はタールボールを作るときに買収の順序が重要であるという事実に驚きました。

tar -cfvz casual.tar.gz snapback.txt bucket.txt

エラーが発生します。

tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

しかし、次のようなコマンドを出すと:

tar -cvzf casual.tar.gz snapback.txt bucket.txt

エラーなしで生成されたターボール

この例では、パラメータの順序がなぜ重要なのか、またはその理由を理解できる情報をどこで見つけることができるのかを説明できる人はいますか?エラーが発生した最初の例と同じように試み、ロジックは必要なパラメータcとfを最初に配置してから別のパラメータを配置することでした。

私はこれが起こる理由を理解することを含むLinuxを完全に吸収したいと思います。よろしくお願いします!

答え1

順序が重要かどうかは、オプションがマイナス記号で始まるかどうかによって異なります。

$ tar -cfvz casual.tar.gz snapback.txt bucket.txt
tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

$ tar cfvz casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt

この異常な動作は、次の文書で文書化されています。マニュアルページ

 Options to GNU tar can be given in three different styles.
 In traditional style
 ...
 Any command line words that remain after all options has
 been processed are treated as non-optional arguments: file or archive
 member names.
 ...
 tar cfv a.tar /etc
 ...
 In UNIX or short-option style, each option letter is prefixed with a
 single dash, as in other command line utilities.  If an option takes
 argument, the argument follows it, either as a separate command line
 word, or immediately following the option.
 ...
 tar -cvf a.tar /etc
 ...
 In GNU or long-option style, each option begins with two dashes and
 has a meaningful name
 ...
 tar --create --file a.tar --verbose /etc

tar、「テープアーカイブ」の略語は、現在のルールが確定する前に存在していたため、他の互換モードを維持します。

したがって、「Linuxを吸収」するには、いくつかの入門プロセスをお勧めします。

  • 常にマニュアルページをお読みください
  • 時には構文の小さな違いが重要です。
    • エントリの場所 - ほとんどのコマンドでは、オプションがコマンド名の後に最初に続く必要があります。
    • マイナス記号が必要かどうか(たとえば、最初にマイナス記号があるかどうかによってtar異なります)ps
    • 空白が選択肢であるか、必須であるか、または存在しないかどうか(xargs -ifooとは異なりますxargs -i foo
  • いくつかのことはあなたが期待どおりに流れない

一般的な方法で目的の動作を取得するには、または直後に出力ファイル名を入力しますf-f

$ tar -cvzf casual.tar.gz snapback.txt bucket.txt
snapback.txt
bucket.txt

または:

$ tar -c -f casual.tar.gz -z -v snapback.txt bucket.txt

あるいは、あまり一般的ではありませんが、読みやすいGNUロングスタイルを使用することもできます。

$ tar --create --verbose -gzip --file casual.tar.gz snapback.txt bucket.txt

答え2

-ftarのマニュアルページのオプションを見ると、次の情報が得られます。

 -f, --file ARCHIVE
       use archive file or device ARCHIVE

これは-f、オプションの後の次の単語がファイル名になることを意味します。あなたの例では、ファイル名として使用される-f文字が続きます。vz

その後、呼び出されるまで各引数を圧縮する入力に解析しますvz。これを試みると、圧縮する名前のファイルtarがないことを確認し、エラーが発生します。casual.tar.gz

したがって、後で-f常に作成したいファイル名に従う必要があります。

関連情報