tar
アーカイバ。複数のファイルを1つにまとめる。
tar には、複数のファイルをまとめて tar 形式というアーカイブファイルにする機能と、その逆の、tar 形式のアーカイブファイルを展開して元のファイルを作成する機能がある。
tar 形式のアーカイブを gzip で圧縮したものは .tar.gz や .tgz という拡張子が付く(.tar.gz でも .tgz でも意味は同じ)。これも .tar と同様に扱うことができる。
hoge.tar の中のファイル一覧を見るとき
hoge.tar.gz/hoge.tgz (hoge.tarを gzip で 圧縮したもの) のファイル一覧を見るとき
hoge.tar.gz の中から、file1、file2 というファイルの情報を見るとき
% tar ztvf hoge.tar.gz file1 file2
hoge.tar.gz の中から、ファイル名が fuga で始まるファイルの情報を見るとき
% tar ztvf hoge.tar.gz file\*
hoge.tar の中身をカレントディレクトリに展開するとき
/tmp/hoge.tar.gz の中身をカレントディレクトリに展開するとき
% tar zxvf /tmp/hoge.tar.gz
/tmp/hoge.tar.gz の中身を ~/test ディレクトリに展開するとき
% tar zxvf /tmp/hoge.tar.gz -C ~/test
% (cd ~/test; tar zxvf /tmp/hoge.tar) (どちらでも同じ結果になる)
hoge.tgz の中から、*.txt というファイルだけをカレントディレクトリに展開するとき
% tar zxvf hoge.tgz \*.txt
hoge.tar から *.txt というファイルだけを /tmp に展開するとき
% tar zxvf hoge.tar -C /tmp `tar tf hoge.tar|grep .txt`
カレントディレクトリ以下のファイル・ディレクトリを /tmp/hoge.tar にまとめるときは、
% tar cvf /tmp/hoge.tar .
とする。このとき、
のようにカレントディレクトリにアーカイブを作成しようとしてはいけない。hoge.tar がカレントディレクトリに書き出されるので、hoge.tar の中に hoge.tar 自身が含まれてしまうことがある。
また、カレントディレクトリが /home/user/dir であるとき、
% tar cf /tmp/hoge.tar /home/user/dir
などとアーカイブ対象ファイルを絶対パス (/home/user/dir) で指定しないようにしよう。
FreeBSD などの tar は
% tar tf /tmp/hoge.tar
home/user/dir/file1
home/user/dir/file2
home/user/dir/file3
home/user/dir/file4
home/user/dir/file5
...
と、絶対パス (から先頭の/を取り除いたもの) でファイル名が記録されてしまい、展開時に無駄なディレクトリが作成されるだけで済む。しかし、HP-UX の tar など、絶対パスで作成したアーカイブは、全く同じディレクトリにしか展開できない。別マシンで展開する場合などは、非常に不便である。
このような場合は、
% cd /home/user/dir ; tar cf /tmp/hoge.tar .
事前に cd してから相対ディレクトリで指定するとよい。カレントディレクトリが変わるのが嫌なら、
% ( cd /home/user/dir ; tar cf /tmp/hoge.tar . )
とサブシェルで実行すれば、シェル自身のカレントディレクトリは変化しない。
>> 用語集
サブシェル *
命令: 以下の中から必ず1つだけ指定しなければならない。
c tarファイルを新しく作る
x tarファイルを展開する
t tarファイルの内容を表示する
r tarファイルに追加する。z や Z オプションと同時には使えない。
オプション:
f tarファイルを指定する
一見、毎回 f オプションを指定する意味がないように思えるが、本来 tar はテープドライブに書き出すコマンドなので、f でアーカイブ名を指定しないとテープドライブのデバイス /dev/rst0 を対象に読み書きしてしまう。
p パーミッションや owner、group の情報を保存する。
これは展開時にのみ影響する。
v バーボーズモード。処理内容を詳しく表示する
パーミッションなどの詳細な情報が表示されるため、はじめのうちはアーカイブ作成・展開時に tar cvf や tar xvf などと v オプションを付けたくなるかもしれない。しかし、慣れてきたら v オプションを指定しないようにしよう。
なぜなら、アーカイブ作成・展開時に何かのエラーが標準エラー出力に表示されるかもしれないからだ。もし v オプションを付加すると、エラー表示が v オプションによる冗長出力に埋もれて気づかない可能性がある。
z gzip で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ztf foo.tar.gz (gzip -dc foo.tar.gz | tar tf - と同じ)
>> コマンド
gzip *
y bzip2 で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ytf foo.tar.bz2 (bzip2 -dc foo.tar.gz | tar tf - と同じ)
>> コマンド
bzip2 *
Z compressで圧縮・伸長する
% tar Zxvf foo.tar.Z
⇒ compress で圧縮されている foo.tar.Z を展開する。
>> コマンド
compress *
O 抽出したファイルを標準出力に出力する (x オプションと併用)
% tar xvfO hoge.tar file1.dat > file2
⇒ hoge.tar から file1.dat を取り出し、file2 というファイル名で保存
C 指定のディレクトリにファイルを展開する
普通に
とすると、カレントディレクトリにファイルが展開される。/bar/ に展開したい場合は
% tar xvf /dir/foo.tar -C /bar
とする。これは
% (cd /bar ; tar xvf /dir/foo.tar)
と同じ。
一見複雑なようだが、archive.tar の中身の一覧を見るときは
archive.tar を展開するときは
カレントディレクトリ以下のファイルを archive.tar にまとめるには
% tar cvf /tmp/archive.tar .
という3つの方法と、*.tar.gz や *.tgz を扱う場合は z を付ける、ということを覚えておけばいい。
なお、GNU tar 以外の tar は z オプションがないので、gzip されたファイルを扱うには、以下のようにパイプでつなぐ必要がある。
% gzip -dc hoge.tar.gz | tar tvf -
⇒ hoge.tar.gz の内容を表示
% gzip -dc hoge.tar.gz | tar xvf -
⇒ hoge.tar.gz を展開
% tar cvf - . | gzip -c > hoge.tar.gz
⇒ カレントディレクトリ以下を tar でアーカイブし、gzip で圧縮
FreeBSD、Linux などは標準の tar が GNU tar であるが、例えば Solaris の標準の tar は GNU tar ではない。ただし管理者が /opt/gnu/bin/tar や /usr/local/bin/tar にインストールしてくれている場合もあるので確認してみよう。GNU tar は gtar というコマンド名でインストールされていることもある。
>> コマンド
xtar * lha * unzip * gzip * gzrecover *
>> 読み方
tar *
tar
(UNIXコマンド) [たー] [たる] [たーる]
"Tape ARchive" の略。[たる] では "樽" みたいだ。 [たーる] ではコールタールみたいだ。
>> コマンド
tar *