tar コマンド

複数のファイルを1つのアーカイブファイルにまとめたり、逆に展開したりするコマンド。オプション -z を使えば、gzip での圧縮または解凍も同時に行う。

tarでのアーカイブファイルの拡張子にはよく .tar が使われる。 -z オプションを付けてgzipでの圧縮も行う場合は .tar.gz.tgz が使われる。

基本操作

## アーカイブ
$ tar cvf tarファイル名 アーカイブ対象ディレクトリ

## 圧縮してアーカイブ
$ tar cvzf tgzファイル名 圧縮対象ディレクトリ

## 展開
$ tar xvf tarファイル名

## 解凍して展開
$ tar xvzf tgzファイル名

## 特定のファイルのみ解凍して展開
$ tar xvzf tgzファイル名 ファイルパス

## アーカイブされているファイルの一覧
$ tar tf tarファイル名

## 圧縮してアーカイブされているファイルの一覧
$ tar tzf tgzファイル名

オプション

-c
新しくアーカイブファイルを作成する。たぶんcreateの意味
-f
アーカイブファイル名をパラメータで指定する。これを指定しないと標準入力 または標準出力が使われる
-t
アーカイブファイルに含まれるファイルの一覧を表示する。たぶんlistの意味
-v
処理の進行しているファイル名を表示する。 -t と併用の場合はタイムスタンプやファイルサイズなども表示する。
-x
アーカイブファイルを展開する。たぶんextractの意味
-z
gzipで圧縮または展開を同時に行う

-z を使う場合は、アーカイブファイルの拡張子として .tar.gz または .tgz がよく使われる。

オプションは先頭のハイフンをとって全部スペースなしでつなげてしまうことができるようで、そのほうがタイプ数が少なくて済むので、普通はそうする。ただし f はアーカイブファイル名の直前である必要があるので、結果的にオプション群の最後に書くことになる。

## 以下の2つは同じ結果になる
$ tar tzf foo.tar.gz
$ tar -t -z -f foo.tar.gz

HOWTO

アーカイブファイルの中のファイル一覧を見るには

ファイル名のみを一覧で表示させるには

$ tar tf archive.tar.gz

パーミッション、ファイルオーナー、グループ、ファイルサイズ、タイムスタンプも表示するには

$ tar tvf archive.tar.gz

リモートにtarでバックアップ、またはリモートからローカルにtarでバックアップ

-> サーバにある大量のファイルを tar しながら、ローカルにダウンロードするには
-> ローカルにある大量のファイルを tar しながら、リモートにアップロードするには

findの結果をバックアップ対象にするには

以下のようにする。

$ find .... -print0 | tar cvzf foo.tar.gz --null -T -

findのオプション -print0 は該当ファイル名をNULL区切りで出力し、 tarのオプション --null -T - は標準入力からアーカイブ対象のファイル名をNULL区切りでパースして取得する。 -T - の2つ目の - は標準入力を意味し、ここにファイル名を書けば、そのファイルからアーカイブ対象のファイル名を取得することになる。

-print0 のハイフンは1つで、 --null のハイフンは2つ。

--null-T - のあとに置くと、tar: -: file name read contains nul character というエラーが発生した。

findtarの間にxargsを使ってしまうと、アーカイブするファイル数が多い場合に tarが複数回起動されてしまい、すべてのファイルが含まれたアーカイブファイルを作れない。

tarファイルの中にある特定のファイルのみを解凍するには

最後のパラメータに解凍したいファイル名を渡せばよい。

$ tar xzf logs.tar.gz var/log/httpd/access_log

拡張子 .tar.xz のファイルを解凍・展開するには

z の代わりに J というオプションを使う。

$ tar xvJf linux-4.0.2.tar.xz
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。