TAR(1)

名称
tar - テープアーカイバ; "tar" アーカイブファイルの操作

書式
tar [[-]bundled-options Args] [gnu-style-flags] [filenames | -C directory-name] ...

解説
tar は、歴史的な理由により “tape archiver” を省略して名付けられました。 tar プログラムは、 tarfile と呼ばれる tar フォーマットのアーカイブファイルを作成し、アーカイブにファイルを追加したり、 またアーカイブからファイルを抽出したりします。 tarfile は通常磁気テープを指しますが、フロッピディスケットや 通常のファイルでも構いません。

通常、 tar コマンドラインの最初の引数は、機能文字および機能変更文字からなる単語であり、 その前に ダッシュ (-) を付けても付けなくてもいいようになっています。 単語には、次の機能文字のうち丁度 1 つを含んでいる必要があります: A, c, d, r, t, u, x, これらはそれぞれ、 追加 (append) 、 作成 (create) 、 差分 (difference) 、 置換 (replace) 、 リスト表示 (table of contents) 、 更新 (update) 、 抽出 (extract) を意味しています (下記に詳細があります)。 これらの他に、以下に詳細を述べる機能変更文字を、コマンド単語に 含めることができます。それらのいくつかは、コマンド単語内と同じ順で コマンドライン引数を要求します ( 使用例 の節を参照)。 機能文字と機能変更文字は、GNU 形式の引数で指定することもできます (2 つのダッシュを最初に付け、1 つのコマンド単語ごとに機能文字か 機能変更文字を 1 つだけ指定する)。 アーカイブへの追加、アーカイブからの抽出、そしてリスト表示のために コマンドライン指定するファイル名には、 シェルのパターンマッチ文字列を使用することができます。

機能
以下の機能のいずれか 1 つだけを必ず指定する必要があります。

-A
--catenate
--concatenate
    指定された ( tar アーカイブ形式の) ファイルを tar アーカイブの末尾 に追加します (追加する前の古い end-of-archive ブロックは削除さ れます)。 これは、指定されたファイルがアーカイブの中の 1 ファイルとなるので はなく、指定したファイルの中に含まれているファイルを、最初に指定 したアーカイブに追加するという効果を持ちます。 注: このオプションは tarfile を再書き込みする必要があるため、1/4 インチカートリッジテープでは動作しません。
-c
--create
    新しいアーカイブを作成して (もしくは古い内容を切り捨てて)、指定 されたファイルをアーカイブに書き込みます。
-d
--diff
--compare
    アーカイブの中のファイルと、それに相当するファイルシステム内の ファイルとの違いを調査します。
--delete
    指定されたファイルをアーカイブから削除します (1/4 インチテープでは動作しません)。
-r
--append
    アーカイブの末尾にファイルを追加します (1/4 インチテープでは動作しません)。
-t
--list
    アーカイブ内容のリスト表示をします。もし引数として filename が指定されていれば、そのファイルだけがリスト表示されます。 そうでなければ、アーカイブに含まれるすべてのファイルリストが表示されます。
-u
--update
    指定したファイルのうち、アーカイブ内のファイルよりもディスク上の ファイルの変更時刻が新しいものだけを追加します。1/4 インチテープ では動作しません。
-x
--extract
--get
    アーカイブからファイルを抽出します。可能ならば、所有者、 変更時刻、ファイル属性はリストアされます。もし file 引数が指定されていなければ、アーカイブ内の全ファイルが抽出されます。 もし filename 引数がテープ上のディレクトリ名にマッチしていれば、そのディレクトリと ディレクトリ内のファイルが抽出されます (ディレクトリ内の すべてのディレクトリについても同様に抽出されます)。 もしアーカイブ内に、相当する同じファイルが複数含まれていれば (上記の --append コマンドを参照)、最後に含まれているものが他のすべてのファイルを 上書きする形で抽出されます。

オプション
tar の他のオプションは、組み合わせて使用することができます。 1 文字オプションは、コマンド単語の中で指定することができます。 引数を与えるべきオプションの場合、オプションに続けて引数を指定し ます。1 文字オプションであれば、これに続くコマンドライン引数を 使用します (以下の 使用例 を参照してください)。

--help
    tar のすべてのコマンドオプションについて一覧と解説を表示します。
--atime-preserve
    テープに書かれている、ファイルのアクセス時刻をリストアします。 (inode の変更時刻が変更されることに注意してください!)
-b
--block-size number
    読み書きするブロックサイズを number * 512-byte ブロック に設定します。
-B
--read-full-blocks
    短い読みだしブロックを、完全なブロックに再組み立てします ( 4.2BSD パイプの読み込み用)。
-C directory
--directory directory
    残りの引数を処理する前に directory へ移動します。
--checkpoint
    アーカイブを読み書きする間に読み書きしたバッファの数を表示します。
-f  [hostname:]file
--file
    [hostname:]file 指定された file (デフォルトは /dev/sa0) を読み書きします。 もし hostname が指定されていれば、 tar は rmt(8) を使って、リモートマシン上の file を読み書きします。 “-” はファイル名として使用されることもありますが、 これは標準入力から読み出したり、標準出力へ書き出したりするために使用されます。
--force-local
    コロンがある時でさえ、アーカイブファイルはローカルのものとします。
-F file
--info-script file
--new-volume-script file
    それぞれのアーカイブが終ると、スクリプトを実行します (暗黙の -M 指定が行なわれます)。
--fast-read
    ワイルドカードで指定されていないすべての抽出ターゲットが アーカイブ内に見つかったら、その時点で終了します。
-G
--incremental
    古い GNU-format インクリメンタルバックアップファイルを作成/リスト/抽出します。
-g file
--listed-incremental file
    新しい GNU-format インクリメンタルバックアップファイルを 作成/リスト/抽出します。
-h
--dereference
    シンボリックリンクをシンボリックのまま書き込みません。シンボリックリンクが 指しているデータを書き込みます。
-i
--ignore-zeros
    アーカイブの中の 0 ブロック (通常、End-Of-File を意味する) を無視します。
--ignore-failed-read
    ファイルが読めなくても、非 0 のステータスで exit しません。
-j
-y
--bzip
--bzip2
--bunzip2
    アーカイブを bzip2(1) でフィルタリングします。
-k
--keep-old-files
    ディスク上に既にあるファイルを保持します。つまり、アーカイブから 抽出するファイルは、ディスク上のファイルへ上書きしません。
-K file
--starting-file file
    アーカイブの中の file から (抽出、リストなどを) 始めます。
-l
--one-file-system
    あるファイルシステム内にあるファイルだけでアーカイブを作成します (他ファイルシステムへのマウントポイントを跨ぎません)。
-L number
--tape-length number
    number * 1024 バイト書き込んだ後でテープの交換を要求します。
-m
--modification-time
    ファイルの変更時刻を抽出しません。
-M
--multi-volume
    マルチボリュームアーカイブを作成/リスト/抽出します。
-n
--norecurse
    作成時に再帰的にサブディレクトリを走査しません。
--volno-file file
    ボリューム番号付きのファイル名です。
-N date
--after-date date
--newer date
    作成時間が date より新しいファイルだけを抽出します。
--newer-mtime date
    変更時間が date より新しいファイルだけを抽出します。
-o
--old-archive
--portability
    POSIX フォーマットではなく、V7 フォーマットのアーカイブを作成します。
-O
--to-stdout
    ファイルを標準出力に抽出します。
-p
--same-permissions
--preserve-permissions
    保護情報を完全に抽出します。
--preserve
    -p -s の指定と同じ効果を持ちます。
-P
--absolute-paths
    ファイル名から先頭の ‘/’ をとりません。
-R
--record-number
    メッセージ中にアーカイブ内のレコード番号を埋め込み表示します。
--remove-files
    アーカイブに追加したファイルを、追加後に削除します。
-s
--same-order
--preserve-order
    アーカイブ内から抽出するファイルを、指定された順のままにします。
--show-omitted-dirs
    アーカイブ作成中に除外されたディレクトリを表示します。
-S
--sparse
    “疎な” ファイルを効率的に扱うようにします。
-T file
-I file
--files-from file
    file から抽出もしくは作成するファイル名を得ます (1 行 1 ファイル名)。
--null
    null で終わっている名前を考慮し、 -T の振舞を変更します。 これは -C 指定を無効にします。
--totals
    --create によって書かれた総バイト数を表示します。
-U
--unlink
--unlink-first
    ファイルを作成する前に、いったん削除します。
-v
--verbose
    --create でアーカイブに書くファイルや --extract でアーカイブから 取り出すファイル名をリスト表示します。 ファイルの保護情報をファイル名とともに表示させるには、 --list を使います。
-V volume-name
--label volume-name
    指定された volume-name を持ったアーカイブを作成します。
--version
    tar プログラムのバージョン番号を表示します。
-w
--interactive
--confirmation
    すべての動作に対して、確認を求めるようになります。
-W
--verify
    アーカイブを書き込んだ後、ベリファイを試みます。
--exclude pattern
    pattern にマッチするファイルを除外します (抽出しません。追加しません。リスト表示しません)。
-X file
--exclude-from file
    file に一覧されているファイルを除外します。
-Z
--compress
--uncompress
    アーカイブを compress(1) でフィルタリングします。
-z
--gzip
--gunzip
    アーカイブを gzip(1) でフィルタリングします。
--use-compress-program program
    アーカイブを program でフィルタリングします (これは、 -d が指定されたときは “decompress” を意味しなければなりません)。
--block-compress
    テープもしくはフロッピのために、圧縮プログラムの出力をブロック 化します (そうしないと、ブロック長がおかしくなり、デバイスドライバは そのブロックを拒絶するでしょう)。
-   [0-7] [lmh] テープドライブと密度を指定します。

環境
環境変数 TAR_OPTIONS に tar のデフォルトオプションを保持させることが可能です。 これらのオプションは最初に解釈されますので、 明示的なコマンドラインパラメータで上書き可能です。

使用例
bert と ernie というファイルを含む、 ブロックサイズが 20 ブロックのアーカイブを、 テープドライブ /dev/sa0 に作るには、
    tar cfb /dev/sa0 20 bert ernie
もしくは
    tar --create --file /dev/sa0 --block-size 20 bert ernie
と入力します。 -f および -b フラグは両方とも引数を必要としていることに注意してください。 この引数は、コマンド単語に書かれているのと同じ順序でコマンドラインから 取得されます。

/dev/sa0 はデフォルトのデバイスであり、20 はデフォルトのブロック サイズですので、上記の例は次のように単純化できます。
    tar c bert ernie
"backup.tar" というアーカイブから、すべての C ソース及びヘッダを 抽出するには、次のようにタイプします。

    tar xf backup.tar '*.[ch]'

シェルがカレントディレクトリ内のファイル名に展開しないよう、パターンを クォートしなければならないことに注意してください (当然、 シェルはアーカイブ内のファイル一覧にアクセスすることはできません)。

ファイルを階層構造ごとコピーするには、このようにコマンドを使用してください:

    tar cf - -C srcdir . | tar xpf - -C destdir

ディスケットに、 gzip(1) を使った圧縮アーカイブを作成するには、次の ようなコマンドラインを使うといいでしょう。
    tar --block-compress -z -c -v -f /dev/fd1a -b 36 tar/

まとめ指定フラグと -- スタイルのフラグを混在させることができない ことに注意してください。次のようにタイプしなければならないわけで はなく、上記のような書き方で 1 文字フラグを使うことができます。
    tar --block-compress --gzip --verbose --file /dev/fd1a --block-size 20 tar/

上のようにして作成したディスクの内容は、次のようにすればリスト 表示できます。

    tar tvfbz /dev/fd1a 36

2 つの tar アーカイブを 1 つのアーカイブにまとめるには、
    tar Af archive1.tar archive2.tar
を使います。こうすると、 archive2.tar に含まれているファイルが archive1.tar の末尾に追加されます (単純に
    cat archive2.tar >> archive1.tar
とタイプしてもうまくいかないことに注意してください。なぜなら、 tar アーカイブの末尾には end-of-file ブロックがあるからです)。

srcdir ディレクトリから 1997 年 2 月 9 日 13:00 以降に変更をされた 全てのファイルをアーカイブするためには、以下の形式を使って下さい。
    tar -c -f backup.tar --newer-mtime 'Feb 9 13:15 1997' srcdir/

他の時間指定形式としては、 ‘02/09/97 13:15’, ‘1997-02-09 13:15’, ‘13:15 9 Feb 1997’, ‘'9 Feb 1997 13:15’, ‘Feb. 9, 1997 1:15pm’, ‘09-Feb’, ‘3 weeks ago’, ‘May first Sunday’ があります。 正しいタイムゾーンを指定するためには、 ‘13:15 CEST’ や ‘13:15+200’ を使用して下さい。

環境変数
tar プログラムは、以下の環境変数を参照します。

POSIXLY_CORRECT
    通常、 tar はファイル指定の中に混ざったフラグを処理します。 この環境変数を設定すると、 tar は最初のフラグ以外の引数を見つける とそれ以降の引数に対してフラグ処理を行なわないという、POSIX 仕様 に合わせた動作を行なうようになります。

SHELL
    インタラクティブモードにおいて、サブシェルの起動が要求されたとき、 SHELL 変数が設定されていればそれが、設定されていなければ /bin/sh が使用されます。

TAPE
    tar のデフォルトのテープドライブを変更します (これは、さらに -f フラグによって変更することができます)。

TAR_RSH
    TAR_RSH 環境変数は、デフォルトシェルに優先して、 tar のデータ転送に使用されます。

関連ファイル

/dev/sa0
    デフォルトのテープドライブ

互換性
-y は FreeBSD だけの機能です。 GNU tar メンテナは、 -j を GNU tar 1.13.18 以降における公式な bzip2(1) 圧縮オプションとして採用しました。 -I オプションは、Solaris の tar との互換性のためにあります。

関連項目
bzip2(1), compress(1), gzip(1), pax(1), rmt(8)

歴史
tar フォーマットは立派な歴史を持っていて、Sixth Edition UNIX に 原点があります。 この tar の実装は GNU 実装であり、 John Gilmore によって書かれた パブリックドメイン tar が元になっています。

作者
-nosplit 次の人を含む、大変多くの人々。[ソースの中の ChangeLog ファイルに記述されている人々] John Gilmore (オリジナルのパブリックドメイン版の作者), Jay Fenlason (最初の GNU 作者), Joy Kendall, Jim Kingdon, David J. MacKenzie, Michael I Bushnell, Noah Friedman そして バグフィックスや追加を貢献してくれた無数の人々。

このマニュアルページは NetBSD 1.0 release から、 FreeBSD グループが 取り込んだものです。

バグ
特徴的な -C オプションの動作は、伝統的な tar プログラムのそれとは異なるので、 あまり頼りにはできません。

-A コマンドで任意の数の tar アーカイブを結合できればいいのですが、それはできません。 これをやろうとしても、2 つ目以降のアーカイブの end-of-archive ブロックが削除されずに残ってしまいます。

tar ファイルフォーマットは準固定幅フィールドフォーマットであり、 デバイス番号用のフィールドは 16 ビット用 (メジャー 8 ビットでマイナ 8 ビット) にデザインされており、我々の 32 ビット番号 (メジャー 8 ビットでマイナ 16+8 ビット) を吸収できません。