tar - tar形式のアーカイブファイルを作成する

スポンサーリンク

tarコマンドは、アーカイブファイルを作成するコマンドになります。複数のファイルを一つのファイルにまとめることができます。tarファイルをさらにgz形式に圧縮して、データの保存やデータの転送に利用することができます。また、tarの由来は"Tape ARchive"となりますが、今は磁気テープに保存することを目的として使うことはないかもしれません。

スポンサーリンク

アーカイブファイルとは

アーカイブファイルとは、複数のファイルやディレクトリを一つのファイルにまとめたファイルです。そして、アーカイブの中のファイルはメンバー(member)と呼ばれます。

アーカイブファイルはファイルの長期保存やバックアップ、他にもファイルの転送などに利用することができます。

アーカイブファイルを作成するのに、ファイルシステム内のファイルが削除されることはありません。また、アーカイブファイルからファイルを取り出すときもアーカイブファイルのメンバーが削除されることはありません。

また、アーカイブファイルは、日本語で書庫ファイルとも呼ばれています。

 

 

 

tarコマンドの操作オプション

tarコマンドはアーカイブファイルを操作するためのオプションがあります。操作オプションは以下の表になります。

操作オプション表

オプション 意味 ロングオプション
-c アーカイブファイルを作成 --create
-x アーカイブファイルからメンバーを展開 --extract
--get
-t アーカイブファイルのメンバーをリスト --list
-r アーカイブファイルにファイルを追加 --append
-u アーカイブにファイルを追加。ただし、その追加するファイルがアーカイブファイル内のファイルより新しい場合、又はアーカイブファイル内にその追加するファイルが存在しない場合に追加。 --update
- アーカイブファイルのメンバーを削除 --delete
-d アーカイブファイルのメンバーとファイルシステム内のファイルを比較 --compare
--diff
-A アーカイブファイルに他のアーカイブファイルを結合 --catenate
--concatenate

 

そして、操作オプションと同時によく使うオプションが2つあります。-fオプションと-vオプションになります。-fオプションはアーカイブファイルを指定するのに使用し、-vオプションはアーカイブファイル内のメンバーの情報を表示するのに使用します。

重要な2つのオプション

オプション 意味 ロングオプション
-f archive-name archive-nameのファイルを指定 --file
-v 処理中のファイル名等を表示 --verbose

 

 

 

アーカイブファイルの作成
(-cオプション)

-cオプションは、-fオプションで指定したアーカイブファイルを作成し、コマンドライン引数で指定したファイルを作成したアーカイブファイルに入れることが出来ます。

コマンド例

または

コマンド例実行前

実行結果

アーカイブファイルに入れるファイルはコマンドライン引数で指定したファイルパスで入れられます。

 

また、-vオプションを用いるとtarコマンドを実行した時にアーカイブファイルに入れたファイル名を表示することが出来ます。

コマンド例と実行結果

 

また、-vオプションを2回使用するとファイル名ではなく、ファイルの情報を表示することが出来ます。

コマンド例と実行結果

 

GNU tarでは、アーカイブファイルに入れるファイルの引数がない状態で空のアーカイブファイルを作成することができません。
コマンド例と実行結果

もし、空のアーカイブファイルを作成したい場合は、/dev/nullを-Tオプションで指定することで空のアーカイブファイルを作成できます。
コマンド例

 

アーカイブファイルのメンバーを表示
(-tオプション)

-tオプションはアーカイブファイルのメンバーを表示することができます。

コマンド例と実行結果

 

また、-vオプションを追加するとアーカイブファイルのメンバーの詳細な情報を表示できます。下の実行結果で、左から3列目の0が並んでいる箇所はファイルサイズを表しています。全て空のファイルで実行しているため、0と表示されています。

コマンド例と実行結果

 

個別にアーカイブファイルのメンバーの情報を表示したい場合は、メンバーのファイルパスをコマンドライン引数で指定します。

コマンド例と実行結果

 

 

 

アーカイブファイルのメンバーを展開
(-xオプション)

-xオプションは、アーカイブファイルのメンバーをアーカイブファイルから展開できます。アーカイブファイルの内容は基本的に相対パスで記述されています。アーカイブファイルのメンバーを展開する場合、カレントディレクトリからの相対パスでファイルが展開されます。

コマンド例

アーカイブファイルの内容

カレントディレクトリの内容

実行結果

 

また、コマンドライン引数にメンバーを記述した場合は、そのメンバーがファイルとして展開されます。

コマンド例と実行結果

 

 

 

アーカイブファイルにファイルを追加
(-rオプション)

-rオプションは、アーカイブファイルにファイルを追加することができます。また、指定したファイルは、コマンドライン引数で指定したファイルパスで入れられます。

コマンド例と実行結果

 

 

 

アーカイブファイルのメンバーを更新
(-uオプション)

-uオプションは、アーカイブファイルのメンバーにコマンドライン引数で指定したファイルが存在しない、又はコマンドライン引数で指定したファイルが新しい場合、そのファイルをアーカイブファイルに追加することができます。

コマンド例と実行結果

 

重複した名前を持つファイルを指定した場合、アーカイブファイルで表示するリストで上から順に指定したすべてのファイルが処理されます。その中の古いファイルを指定したい場合は、--occurrenceオプションが利用できます。
--ocurrenceオプションは数字を指定することができます。重複した名前を指定したとき、アーカイブファイルのリスト上で一番上のものが1、その下のものが2というように指定できます。また、--occurenceオプションで特に数字を指定しない場合、デフォルトは1になります。
コマンド例と実行結果

 

 

 

アーカイブファイルのメンバーを削除
(--deleteオプション)

--deleteオプションは指定したアーカイブファイルのメンバーを削除することができます。

コマンド例と実行結果

 

 

 

アーカイブファイルのメンバーとファイルシステムのファイルのファイル情報を比較
(-dオプション)

-dオプションは、アーカイブファイルのメンバーとファイルシステムのファイルでの、ファイルサイズや更新日時、ファイル権限などの情報を比較します。

コマンド例と実行結果

 

 

 

アーカイブファイルに他のアーカイブファイルを結合
(-Aオプション)

-Aオプションは、アーカイブファイルに他のアーカイブファイルの内容を結合することができます。

コマンド例と実行結果

 

 

 

tarコマンドのオプション

tarコマンドには、操作オプションの他に、その処理に影響を及ぼすオプションがとても多くあります。-fオプションや-vオプションはその例になります。例えば、GNU tarのすべてのオプションは3.4.2 tar Optionsにまとめられています。

 

 

 

圧縮に関するオプション

tarコマンドは、アーカイブファイルを作成するのと同時に圧縮を行うことができます。例えば、GNU tarでサポートされている圧縮オプションには以下のものがあります。

圧縮のオプション

オプション ファイル拡張子 圧縮プログラム
-z
--gzip
.gz
.tgz
.taz
gzip
-J
--xz
.xz xz
-j
--bzip2
.bz2
.tz2
.tbz2
.tbz
bzip2
--lzip .lz lzip
--lzma .lzma
.tlz
lzma
--lzop .lzo lzop
-Z
--compress
.Z
.taZ
compress

 

例えば、gz形式に圧縮するコマンド例は以下のようになります。また、gzipコマンドの-tオプションはgzipで圧縮されたファイルかどうかを確認するオプションで、-vオプションはその情報を表示するオプションになります。

コマンド例と実行結果

 

また、tarコマンドの-aオプションを用いると作成するアーカイブファイルのファイル拡張子に合う圧縮を自動で行います。

コマンド例と実行結果

 

また、デフォルトの圧縮方法以外を用いる場合は-Iオプションまたは通常の圧縮方法を用いることができます。また、パイプを用いた例で指定したファイル'-'は標準出力を指定しています。

コマンド例

または

 

 

 

上書きに関するオプション

tarコマンドでファイルを展開する場合は、デフォルトの動作としてファイルは上書きされます。上書きを抑制する場合は、以下のオプションがあります。

上書き抑制のオプション

オプション 意味
-k
-keep-old-file
ファイルを上書きしない。
上書きしないファイルがある場合、
標準エラー出力にメッセージを表示
--skip-old-files ファイルを上書きしない。
メッセージも表示しない

コマンド例と実行結果

 

tarコマンドのファイル展開時のデフォルトの動作は上書きですが、上書きを明示したい場合のオプションとして、--overwriteもあります。

 

展開時のファイルを標準出力または外部プログラム操作

アーカイブファイルからファイルを展開するときに、そのファイルを標準出力または外部プログラムによる操作を行うことができます。

 

標準出力
(-Oオプション)

アーカイブファイルからファイルを展開するとき、-Oオプションを用いるとファイルを作成するのではなく、そのファイルを標準出力することができます。

コマンド例と実行結果

 

また、-Oオプションを用いれば、パイプを通して、ファイルを処理することができます。

コマンド例と実行結果

 

 

 

外部プログラム操作
(--to-commandオプション)

複数のファイルをアーカイブファイルから取り出して、プログラムで処理をする場合、--to-commandオプションが利用できます。
アーカイブファイルから取り出したファイルはファイルを作成するのではなく、パイプを通して、--to-commandオプションで指定したコマンドによって処理されます。

--to-commandオプションを利用する場合、環境変数から情報を得ることができます。環境変数はGNU tarのマニュアルのWriting to an External Programにまとめられています。

ここでは、tarコマンドで拡張子が.txtファイルの内容を表示していきます。シェルスクリプト、test.shを作成して、test.shを--to-commandを用いて実行してみます。

test.sh

このtest.shは引数にファイル名を必要とし、そのファイル名の拡張子が.txtの場合は、そのファイルの内容を表示します。

 

また、以下のファイルからアーカイブファイルを作成します。

アーカイブファイルに保存するファイルの内容

 

上のファイルからアーカイブファイルを作成し、--to-commandオプションでtest.shを利用しtarコマンドで拡張子が.txtのファイルの内容を表示していきます。

コマンド例と実行結果

 

以上のように、--to-commandオプションを用いて、tarコマンドでアーカイブ内のファイルを外部プログラムで処理することができます。

 

 

 

参考

GNU tar manual