複数のファイルを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
-f
-t
-v
-t
と併用の場合はタイムスタンプやファイルサイズなども表示する。-x
-z
-z
を使う場合は、アーカイブファイルの拡張子として.tar.gz
または.tgz
がよく使われる。
オプションは先頭のハイフンをとって全部スペースなしでつなげてしまうことができるようで、そのほうがタイプ数が少なくて済むので、普通はそうする。ただしf
はアーカイブファイル名の直前である必要があるので、結果的にオプション群の最後に書くことになる。
## 以下の2つは同じ結果になる$ tar tzf foo.tar.gz$ tar -t -z -f foo.tar.gz
ファイル名のみを一覧で表示させるには
$ tar tf archive.tar.gz
パーミッション、ファイルオーナー、グループ、ファイルサイズ、タイムスタンプも表示するには
$ tar tvf archive.tar.gz
->サーバにある大量のファイルを tar しながら、ローカルにダウンロードするには
->ローカルにある大量のファイルを tar しながら、リモートにアップロードするには
以下のようにする。
$ 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
というエラーが発生した。
find
とtar
の間にxargs
を使ってしまうと、アーカイブするファイル数が多い場合にtar
が複数回起動されてしまい、すべてのファイルが含まれたアーカイブファイルを作れない。
最後のパラメータに解凍したいファイル名を渡せばよい。
$ tar xzf logs.tar.gz var/log/httpd/access_log
z
の代わりにJ
というオプションを使う。
$ tar xvJf linux-4.0.2.tar.xz