3.1 tarの一般的な構文

GNU tarプログラムは、次のいずれかの形式で呼び出します。

tar option... [name]...
tar letter... [argument]... [option]... [name]...

2つ目の形式は、古いオプションを使用するときのものです。

tarは、ファイルのアーカイブへの格納、アーカイブからの展開、そのほかのアーカイブ操作に使用できます。tarの主要な引数は「操作」(operation)と呼ばれ、実行する処理を指定します。その他の引数は、操作の実行方法を変える「オプション」(options)、または処理対象のファイルやメンバーを指定するファイル名・アーカイブメンバー名です。

実際には、引数は任意の順序で入力できます。本書では、例を分かりやすくするために、常にオプションをその他の引数より前に置いています。また、主な動作モードを指定するオプション(tarの主要コマンド)は、通常、最初に指定します。

上記の構文の各nameは、主要コマンドが--compare(--diff、-d)、--delete、--extract(--get、-x)、--list(-t)、または--update(-u)の場合、アーカイブメンバー名として解釈されます。メンバーを指定するには、--listで表示されるとおりの、アーカイブ内の正確な名前を指定しなければなりません。--append(-r)と--create(-c)の場合、これらのname引数はアーカイブに格納するファイルやディレクトリ階層の名前です。これらのファイルや階層は、tarコマンドを実行する前にファイルシステム内に存在していなければなりません。

tarは相対ファイル名を作業ディレクトリからの相対名として解釈します。別途指定しないかぎり、ファイルのアーカイブや復元時に先頭のスラッシュを除去し、すべてのファイル名を相対名にします。別の指定には--absolute-namesオプションを使います。詳細は絶対ファイル名を参照してください。

ファイル名またはメンバー名としてディレクトリ名を指定すると、tarはそのディレクトリの下にあるすべてのファイルとディレクトリを再帰的に処理します。たとえば、/という名前は、ファイルシステム内のすべてのファイルをtarに指定することになります。

ファイル名とアーカイブメンバー名の区別は、シェルのグロブ展開を使用する場合に特に重要であり、初心者が混乱する原因になることがあります。グロブ展開の詳細はワイルドカードのパターンと照合を参照してください。問題は、シェルがファイルシステム内の既存ファイルだけを対象にグロブ展開する点です。アーカイブメンバーを対象にグロブ展開できるのはtar自身だけです。そのため、必要に応じて、ワイルドカード文字が先にシェルで解釈されず、そのままtarへ渡るようにしなければなりません。通常は、*や?の前にバックスラッシュを付けるか、引数全体を引用符で囲めば十分です。

nameはコマンドラインで指定することが多いものの、--files-from=file-of-names(-T file-of-names)オプションを使い、ファイルシステム内のテキストファイルから読み込むこともできます。

ファイル名の引数を指定しない場合、--append(-r)、--delete、--concatenate(--catenate、-A)は何もしません。一方、--create(-c)は通常、診断メッセージを出力し、tarの実行を抑止します。その他の操作(--list、--extract、--compare、--update)は、アーカイブの内容全体を対象にします。

GNU tarは正常終了する場合のほか、さまざまな理由で失敗することがあります。コマンドラインの書き方が誤っているなど、使い方に起因するものもあります。アーカイブやファイルの処理中にエラーが発生することもあります。回復可能なエラーでは、tarがすべての作業を終えるまで失敗の確定を遅らせます。処理を続けても意味がない、または危険を伴うエラーでは、ただちに処理を中止します。即時・遅延のどちらの異常終了でも、エラーの性質を示す行の後に、stderrへ明確な診断を必ず出すべきです。

GNU tarの終了コードを次にまとめます。

0

「正常終了」(Successful termination)。

1

「一部のファイルが異なる」(Some files differ)。--compare(--diff、-d)で呼び出した場合、アーカイブ内の一部のファイルが、ディスク上の対応するファイルと異なることを意味します(アーカイブメンバーとファイルシステムの比較を参照)。--create、--append、--updateを指定した場合、この終了コードは、アーカイブ処理中に一部のファイルが変更され、結果のアーカイブが対象ファイル群の正確なコピーになっていないことを意味します。

2

「致命的エラー」(Fatal error)。回復できない致命的エラーが発生したことを意味します。

tarがサブプロセスを呼び出し、そのサブプロセスが0以外の終了コードで終了した場合、tarもそのコードで終了します。たとえば、圧縮オプションを指定し(圧縮アーカイブの作成と読み込みを参照)、外部圧縮プログラムが失敗した場合に起こります。リモートデバイスへのバックアップ中にrmtが失敗した場合も、その例です(リモートテープサーバーを参照)。