ラズベリーパイの操作の基本コマンドとして、tarを取り上げます。
tarコマンドは、たくさんのファイルを1つのファイルにまとめるコマンドです。
一つのファイルにまとめることで管理が楽になりますし、またたくさんのファイルが入ったディレクトリのコピーを高速に行ったり、バックアップに活用したりできます。
また、lessコマンドにより、tarでまとめたファイルの一覧を簡単に確認することができます。
たくさんのファイルを1つにまとめて管理する
tarコマンドを使う目的は、たくさんのファイルを1つにまとめて管理することです。
例えば、”photo/”というディレクトリがあり、この中に100枚のjpg画像があるとします。
1 2 | $ ls photo/ |
jpg画像をimage_0.jpg〜image_99.jpgとしましょう。
この状態で、以下のコマンドを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 | $ tar cvf photo.tar photo photo/ photo/image_53.jpg photo/image_12.jpg photo/image_31.jpg photo/image_89.jpg photo/image_58.jpg photo/image_99.jpg (途中は省略) photo/image_70.jpg $ ls photo/ photo.tar |
すると、上記のような表示になるとともに、最後のlsコマンドで確認すると、photo.tarというファイルができていると思います。
このphoto.tarには、photo以下のすべてのファイル(image_0.jpg〜image_99.jpg)が含まれています。
試しに、photo.tarを別のディレクトリに移して、これを展開してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ ls photo.tar $ tar xvf photo.tar photo/ photo/image_53.jpg photo/image_12.jpg photo/image_31.jpg photo/image_89.jpg photo/image_58.jpg photo/image_99.jpg (途中は省略) photo/image_70.jpg $ ls photo/ photo.tar |
“photo/” というディレクトリができていて、その中に、もとの100個のjpgファイルが収められていると思います。
このように、tarコマンドを使えば、たくさんのファイルをまとめて1つのファイルを作ることができるのです。
tarにはいくつかのオプションがありますが、次の2つを覚えておけばでしょう。
- まとめる時: tar cvf [まとめたあとのファイル名] [ディレクトリ名]
- 展開する時: tar xvf [まとめたあとのファイル名]
“まとめたあとのファイル名”は、”.tar”をつけるようにしてください。
ディレクトリ名の下には、ファイルの他にサブディレクトリがいくつあってもかまいません。
また、ディレクトリ名と書きましたが、ここにはファイル名を個別に複数個並べて書くこともできます。
1 | $ tar cvf photo_part.tar image_0.jpg image_1.jpg |
などです。これはカレントディレクトリにあるimage_0.jpgとimage_1.jpgとをまとめます。
tarコマンドの直後に書くcvfやxvfは、tarの仕様により”-“を付ける必要はありません。cはまとめるファイルを作る指定、vはまとめるファイル名一覧を表示、fはまとめるファイル名を後続に指定、xは展開を指示するするオプション(function)です。
慣れるまでは、”cvf”, “xvf”をセットで覚えておきましょう。
たくさんのファイルが入ったディレクトリのコピーを高速に行う
さて、このtarコマンドですが、たくさんのファイルが入ったディレクトリをコピーするときに高速なることがあるというメリットがあります。
コピー先がメモリなのかネットワーク越しのHDDなのかといった状況にもよりますが、
1 | $ cp -pr photo.tar (別のディレクトリ) |
とやる場合と、上記のphoto.tarを作ってそのファイルだけをコピーする場合とでは大きく差があることがあります。
コピーに限らず、mvによる移動やftpによるファイル移動もそうです。
大量のファイルをコピーするのに時間がかかる場合、一度tarでまとめるということを試してみましょう。
ただし、注意があります。それはコピー用にtarファイルを作成するときは、tarファイルのサイズ分だけ余分にディスク容量を消費することです。
例えば、photoディレクトリのサイズが1GBとしましょう。tarコマンドでphoto.tarを作ると、photo.tarも1GBほどになります。この分のディスク容量が空いていることをチェックしておく必要があります。
バックアップに活用する
tarは、バックアップを取るときにも活用できます。
たくさんあるファイルをtarでまとめて1つにしておけば、管理も楽ですね。
tarでまとめたファイルの一覧をみるには
tarでまとめたファイルの中身を一覧で見るには、以下の2つ方法があります。
- 一覧表示: tar tvf [まとめたあとのファイル名]
- less [まとめたあとのファイル名]
tオプションを使う
tオプションを使って、”tar tvf まとめたあとのファイル名”と打つと、tarでまとめたファイルの中身を一覧表示できます。
たくさんあるときは、lessにパイプするか、ファイルにリダイレクトします。
1 2 3 4 5 | $ tar tvf photo.tar あるいは $ tar tvf photo.tar|less あるいは $ tar tvf photo.tar > photo_list.txt |
lessで見る
でも、もっと簡単な方法がありました。
lessコマンドで、tarファイルを直接読むことができるのです。
1 | $ less photo.tar |
こちらの方が簡単ですね。
ただし、ラズベリーパイでは、このlessで開く方法を使うために環境変数を設定する必要があります。
.bashrc ファイルに
1 | export LESSOPEN="| /usr/bin/lesspipe %s"; |
を設定して、
1 | $ source .bashrc |
を実行してください。(新しくLX Terminalを開くときは不要です。)
実はこれは、lessでtarファイルを開く直前に “/usr/bin/lesspipe” というツールを通す操作を行う設定なのですが、このlesspipeというツールの中で、”tar tvf “を実行しているのです。
ですから、本質的には手動でtar tvfを実行するのと変わりはありません。
でも、自動的に実行してくれるので便利ですね。
この/usr/bin/lesspipeを改良して自分専用の仕様にしてみるなど、慣れてきたら挑戦してみてください。環境変数LESSOPENにそのパスを指定すれば実現するはずです。