あらゆるアーカイブを管理できるツール、atool
atool を利用すると、さまざま方式で圧縮された、さまざまな形式のアーカイブを同じコマンドライン・インタフェースで扱うことができる。実体はPerlスクリプトのコレクションで、実際の処理はそれぞれに該当するネイティブのツールが行う。アーカイブを展開するコマンドやオプションはアーカイブの形式ごとに異なるが、atoolがそうした違いを吸収してくれるため、同じ方法でアーカイブを扱うことができるのだ。
atoolにはaunpack、apack、als、acat、adiff、arepackというコマンドがあるが、いずれもatoolのメインPerlスクリプトにリンクしており、各コマンドが持つ機能に応じてアーカイブの展開や作成などを実行する。
アーカイブを展開するaunpackは、ファイルが複数含まれている場合はファイルをサブディレクトリーに、1つだけの場合はカレント・ディレクトリーに置くが、-subdir(または-D)オプションが指定されていると、どちらの場合もサブディレクトリーに置く。この仕様はアーカイブを/tmpに展開するときに大いに役立つ。ファイルがサブディレクトリーに入っていないアーカイブをうっかり/tmpで展開して、ファイルをその中にばらまいてしまうおそれがないからだ。
atoolで扱えるtarの圧縮方式には、gzip、bzip2、compress、lzop、7z、rar、lha、ace、arj、rpm、deb、jar、7zip、cpioがあり、さらに数種の圧縮方式を扱うことができる。ただし、それぞれの圧縮方式に応じたネイティブのツールがあればの話だ。一部のアーカイブ形式については内容の一覧と展開しかできないが、これはそのアーカイブを作るプログラムが入手できないためだ。たとえば、aceアーカイブの作成や変更はできない。
それでは、いくつか使用例を見てみよう。まず、ごく簡単なファイルシステムを作り、そのtar.bz2ファイルを作成する方法を示す。もちろん、bzip2やgzipで圧縮したtarを作る方法など教わるまでもないだろう。この例を挙げたのは、これとまったく同じ構文で、どのような形式(サポートされていれば)のアーカイブでも作れることを示すためだ。
$ cd /tmp
$ mkdir atest
$ cd atest
$ mkdir testdir
$ cd testdir
$ date >df1.txt
$ date >df2.txt
$ mkdir subdir1
$ date >subdir1/subfileb.txt
$ cd /tmp/atest
$ date >rawfile.txt
$ apack testdir.tar.bz2 testdir
testdir/
testdir/df1.txt
testdir/subdir1/
testdir/subdir1/subfileb.txt
testdir/df2.txt
$ file testdir.tar.bz2
testdir.tar.bz2: bzip2 compressed data, block size = 900k
$ tar tjvf testdir.tar.bz2
drwxrwxr-x ben/ben 0 2008-01-17 18:11 testdir/
-rw-rw-r-- ben/ben 29 2008-01-17 18:11 testdir/df1.txt
drwxrwxr-x ben/ben 0 2008-01-17 18:11 testdir/subdir1/
-rw-rw-r-- ben/ben 29 2008-01-17 18:11 testdir/subdir1/subfileb.txt
-rw-rw-r-- ben/ben 29 2008-01-17 18:11 testdir/df2.txt
$ als testdir.tar.bz2
drwxrwxr-x ben/ben 0 2008-01-17 18:11 testdir/
-rw-rw-r-- ben/ben 29 2008-01-17 18:11 testdir/df1.txt
drwxrwxr-x ben/ben 0 2008-01-17 18:11 testdir/subdir1/
-rw-rw-r-- ben/ben 29 2008-01-17 18:11 testdir/subdir1/subfileb.txt
-rw-rw-r-- ben/ben 29 2008-01-17 18:11 testdir/df2.txt
$ apack testdir.cpio.7z testdir
7-Zip (A) 4.51 beta Copyright (c) 1999-2007 Igor Pavlov 2007-07-25
p7zip Version 4.51 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)
Scanning
Creating archive testdir.cpio.7z
Compressing testdir/df1.txt
Compressing testdir/df2.txt
Compressing testdir/subdir1/subfileb.txt
Everything is Ok
$ als testdir.cpio.7z
7-Zip (A) 4.51 beta Copyright (c) 1999-2007 Igor Pavlov 2007-07-25
p7zip Version 4.51 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)
Listing archive: testdir.cpio.7z
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2008-01-17 18:11:04 ....A 29 42 testdir/df1.txt
2008-01-17 18:11:06 ....A 29 testdir/df2.txt
2008-01-17 18:11:16 ....A 29 testdir/subdir1/subfileb.txt
2008-01-17 18:11:16 D.... 0 0 testdir/subdir1
2008-01-17 18:11:11 D.... 0 0 testdir
------------------- ----- ------------ ------------ ------------------------
87 42 3 files, 2 folders