tarコマンドの使い方まとめ

ファイルを圧縮したい。
そんな時に使うtarコマンドですが、そんな頻繁には使うことがないのでついつい忘れてしまいます。

そこで、tarコマンドの使い方をまとめてみました。

tarコマンドとは

複数のファイルやディレクトリなどを1つにまとめ、ファイルの容量を小さくして(圧縮して)くれるコマンドです。

メールでファイルを添付する際に容量を小さくまとめる為に使用したり、
HDD、SDカードのバックアップなど、頻繁に使用することのないファイル群を容量を小さくして保管しておく時などに便利です。

特に、Linuxのファイル圧縮システムとして普及しています。

tarコマンドで使用できる圧縮・展開アルゴリズム

tarコマンドでは、gzip, bzip2, xz, lzma、これら4つのアルゴリズムに基づいてファイルを圧縮・展開することができます。

それぞれの圧縮・展開アルゴリズムの特徴は以下の通りです。

  • gzip(拡張子 : .tar.gz または .tgz)
    gzipを基準と考える。
  • bzip2(拡張子 : .tar.bz または .tbz)
    gzipよりも圧縮率が高い。しかし、圧縮・展開スピードはgzipより劣る。
  • xz(拡張子 : .tar.xz)
    gzip・bzip2よりも圧縮率が高い。しかし、圧縮・展開速度はgzip・bzip2よりも劣り、メモリも多く消費する。
  • lzma(拡張子 : .tar.lzma)
    一般的に、bzip2より高い圧縮率と圧縮・展開スピードを誇る。

tarコマンドの圧縮コマンド

$ tar <option> <output_file> <input_directory>

このような書式になります。
tarコマンドの圧縮オプション(以下の例では-ハイフン以降の3文字目)を変更することで、それぞれの圧縮方法で圧縮することができます。tar.lzma圧縮のみオプション指定が特殊ですので、注意が必要です。

tar.gz圧縮

$ tar -cvzf filename.tar.gz <target_directory>

tar.bz圧縮

$ tar -cvjf filename.tar.bz <target_directory>

tar.gz圧縮

$ tar -cvJf filename.tar.xz <target_directory>

tar.lzma圧縮

$ tar -cvf --lzma filename.lzma <target_directory>

オプションの簡単な説明
-c : create(圧縮ファイル作成)
-v : verbose(詳細情報の表示)
-z : tar.gzで圧縮
-j : tar.bzで圧縮
-J : tar.xzで圧縮
–lzma : tar.lzmaで圧縮。lzmaはロングオプションでしか指定できないので注意。
-f : filename(ファイル名の指定)

tarコマンドの展開コマンド

先ほどの圧縮コマンドの1文字目をxに変更することで、tar展開ができます。
オプションのxはextractのxです。
こちらも同様にtarコマンドの展開オプション(以下の例では-ハイフン以降の3文字目)を指定することで、それぞれの方式で圧縮されたファイルを展開できます。

tar.gz圧縮

$ tar -xvzf filename.tar.gz <target_directory>

tar.bz圧縮

$ tar -xvjf filename.tar.bz <target_directory>

tar.gz圧縮

$ tar -xvJf filename.tar.xz <target_directory>

tar.lzma圧縮

$ tar -xvf --lzma filename.lzma <target_directory>

tarコマンドのオプション一覧

tarコマンドで使用するオプションをまとめてみました。

モード指定のためのオプション

-c, –createアーカイブを作成します。(圧縮)
-r, –appendアーカイブに新たにファイルを追加します。
-t <patterns>アーカイブされたファイルの中身のうち、<patterns>にマッチしたものを表示します。
-u, –updateアーカイブを更新します。
アーカイブと対象のディレクトリを比較し、
変更日時の新しいファイルと、アーカイブに存在しない新しいファイルを探して追加します。
-x, –getアーカイブされたファイルを展開します。

共通のオプション

-b, –block-size <N>ブロックサイズを<N>*512バイトとします。(デフォルトではN=20。)
-f <filename>アーカイブの場所(ファイル名)を指定します。
-vverboseモード。コマンド実行時の詳細情報を表示します。
-wインタラクティブモード。全ての動作に対して確認を求めます。

Createモード(圧縮)時のコマンド
tar -c [options] [<file> | <dir> | @<archive> | -C <dir> ]

-zgzipアルゴリズムで圧縮します。拡張子は.tar.gzまたは.tgz。
-jbzip2アルゴリズムで圧縮します。拡張子は.tar.bzまたは.tbz。
-Jxzアルゴリズムで圧縮します。拡張子は.tar.xz。
–lzmalzmaアルゴリズムで圧縮します。拡張子は.tar.lzma。
–formatアーカイブのフォーマットを指定します。
ustar, pax, cpio, shaの4つのうちどれかを指定します。
–exclude <pattern>指定したパターンにマッチするファイルを除外します。
例えば、.oファイルを除外する場合、–exclude “*.o”と指定します。
-C, –directory <dir>カレントディレクトリを<dir>に変更してから処理を実行します。
@<archive><archive>から出力にエントリーを加えます。

Extractモード(展開)時のコマンド
tar -x [options] [<patterns>]

<patterns><patterns>を指定した場合、パターンにマッチしたもののみを展開します。
-k既に存在しているファイルは上書きしない。
-mアクセス日時(変更日時)を修正しない。
-Oエントリをstdoutに出力します。(diskへの書き出しは行われません。)
-pパーミッションを書き換えます。(ACLs, owner, file flagsを含みます。)

以上、tarコマンドの使い方についてでした。