スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

Linux や FreeBSD などの Unix 系のオペレーティングシステムの tarコマンドは、ファイルをアーカイブするのに利用されるコマンドです。Macでも利用できます。WindowsでもWindows Subsystem for Linux (WSL)でも利用できます。

アーカイブの英単語のスペルは archive です。
辞書には、記録や資料のコレクションや デジタル化されたデータを圧縮する技術や方法、などと書かれています。

tarコマンドは、複数のファイルを1つにまとめるために使われます。tarと併用して利用されるのが、圧縮技術です。LinuxやFreeBSDなどのUnixの世界では、複数のファイルを tar で1つにまとめて、圧縮されています。

標準入出力を使いこなすということ

tar アーカイブを操作するためのtarのようなコマンドで標準出力にアーカイブしたデータを出力して、なにが楽しいのか?と思われる方もいらっしゃるかもしれませんが、 これは、リモート、ローカルを問わず、ファイルのコピーなどに利用できます。標準出力に出力する場合は、tar はファイルに書き込まないため、ストレージの容量を消費しません。また、ストレージに書き込まないため、次の工程(たとえば、次のコマンドの実行)がある場合に、ストレージから読み出す作業も省略できます。Unixのパイプの優れている部分は、ストレージの読み書きを省略して、1つ1つのコマンドの完了を待つのではなく、コマンド・プロセスたちの標準入力と標準出力をつなぎあわせ、処理を到着したデータからどんどん進められることだと思います。

find と tar を組み合わせて、任意のファイルだけをコピーするといった使い方もできますし、ディレクトリを tar でまとめて、別のサーバにコピーすることもできます。もちろん、rsync などの別のコマンドで代替すれば良い場合もあると思いますが、 rsync が入ってないから tar と ssh でやりたい、という稀なケースもあるかもしれません。

読み方

tar は、「たー」と読みます。

拡張子

tarのアーカイブファイルの拡張子は、 .tarです。

tarのアーカイブファイルを圧縮した場合は、 .tar の後ろに、さらに圧縮形式を表す拡張子が追加されます。参考例を以下に示します。
  • gzip 形式は .tar.gz
  • bzip2 形式は .tar.bz2
  • xz 形式は .tar.xz

tarコマンドの基本

ここは、標準出力や標準入力の話ではなく、一般的な tar コマンドの使い方を説明します。

下記コマンドを実行するとカレントディレクトリが hoge.tar.gz にアーカイブされ、gzipに圧縮されます。
tar zcf /tmp/hoge.tar.gz .

bzip2 形式で圧縮する場合は、以下の通りです。
tar jcf /tmp/hoge.tar.bz2 .

xz 形式で圧縮する場合は、以下の通りです。
tar Jcf /tmp/hoge.tar.xz .

解凍する場合には、以下のコマンドを実行します。
tar zxfp hoge.tar.gz
tar jxfp hoge.tar.bz2
tar Jxfp hoge.tar.xz

アーカイブファイルに入っているファイル名の一覧を確認する場合には t オプションを使用します。
tar ztf hoge.tar.gz
tar jtf hoge.tar.bz2
tar Jtf hoge.tar.xz

tar コマンドの zxfp とか jxfp とか Jxfp とか、なぞの暗号みたいなオプションは、以下の通りです。
以下のオプションがよく利用されると思います。

オプション説明
-c アーカイブを作成する
-x アーカイブを伸長する
-f アーカイブファイル名を指定する
-p xのときのみ、パーミッションを維持する
-t アーカイブされているファイルのコンテンツをリストします
-z gzip で圧縮する
-j bzip2 で圧縮する
-J xz で圧縮する

tarコマンドを別のコマンドにパイプにつなぐ方法

tarコマンドの出力をファイルではなく、標準出力(stdout)に出すことも可能です。ファイル名を指定する代わりに、 -(マイナス・ダッシュ)を指定します。

tar zcf - .

また、fオプションとハイフンの代わりに、 --to-stdout もしくは -O (オー) のオプションを利用できます。
tar zcO  .

freebsd だと上記のコマンドは、失敗しますが、Linux だと動きます。
tar: Option -O is not permitted in mode -c


標準出力をパイプで別のプロセスにつなげて、利用することを想定しています。つまり、以下の使い方です。

tar zcf - . | ほかのコマンド

tarを利用して、ディレクトリを別のサーバに送信する方法


rsync を利用する方法もあると思いますが、 tar を使用して、ほかのサーバ等にファイルをまとめて送りたいときに、 tar をパイプで ssh につないで、データを転送することもできます。

ここで紹介するのは、カレントディレクトリを foo:/home/tmp/ にバックアップする方法です。 カレントディレクトリを意味するドット「.」を適当なディレクトリに指定すれば、任意のディレクトリをバックアップできます。
tar zcf - . | ssh foo tar zxfp - -C /home/tmp/

これは、ファイルが多いときなどに便利です。1つ1つファイルを送信する scp より高速にコピーを完了できる場合があります。
扱うデータの種類(もともと圧縮されていて、gzipなどによる圧縮効果の低いもの)によっては z をはずして、圧縮しないでやるのも場合によってはよいでしょう。
tar cf - . | ssh foo tar xfp - -C /home/tmp/

リモートに tar のアーカイブでコピーしたい場合には、 cat コマンドとリダイレクトを併用して、ファイルに書き込むこともできます。リダイレクトの指定の解釈をリモートのホストで行うため、catコマンドをクォートで囲むことに注意してください。
tar zcf - . | ssh foo 'cat > target_file.tar.gz'

これで、ローカルストレージに一時的なファイルを作成せずに、リモートに転送できました。ssh だけでデータ転送ができましたね。

tarを利用して、別のディレクトリにコピーする

tar を利用して、カレントディレクトリを別のディレクトリにコピーする方法を紹介します。

以下の例では、カレントディレクトリを /home/tmp/ にコピーします。
tar zcf - . | tar zxfp - -C /home/tmp/

findを組み合わせて tar でコピーする

find コマンドで、ファイルを検索して、検索したファイルのみ、 xargs を併用して、tar でアーカイブして、指定のディレクトリにコピーする例です。
find . -name "*.txt" | xargs tar cf - | tar xf - -C /home/tmp

関連

[2008-07-10-2] FreeBSD 標準入力 stdinをtarする方法
[2008-07-09-2] tarコマンドの使い方
参照しているページ (サイト内): [2009-03-08-1] [2008-08-21-1] [2008-07-10-2] [2008-07-09-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー