tarの標準出力や標準入力を使いこなす方法
スポンサーリンク
このドキュメントの内容は、以下の通りです。
- はじめに
- 標準入出力を使いこなすということ
- 読み方
- 拡張子
- tarコマンドの基本
- tarコマンドを別のコマンドにパイプにつなぐ方法
- tarを利用して、ディレクトリを別のサーバに送信する方法
- tarを利用して、別のディレクトリにコピーする
- findを組み合わせて tar でコピーする
- 関連
はじめに
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]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 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