この例を見て誰しも思うのが、アーカイブを展開するときに作成されるサブディレクトリーに自動的に移ってほしいということ。残念ながら、それにはaunpackをシェル関数で包む必要がある。次に示すシェル関数は、atoolマニュアル・ページにあるものを基に、サブプロセスの実行と、デフォルトで-iを含むようにエイリアスされているrmコマンドを回避するように修正してある。
aunpack () {
TMP=$(mktemp /tmp/aunpack.XXXXXXXXXX);
atool -x --save-outdir=$TMP "$@"
DIR="$(cat $TMP)"
[ "$DIR" != "" -a -d "$DIR" ] && cd "$DIR"
/bin/rm -f $TMP
}
arepackとadiffは、アーカイブのまま扱うコマンドだ。arepackはアーカイブの形式を変更し、adiffは2つのアーカイブを比較してそのdiffを表示する。args_diffオプションはdiffを生成する際のオプションで、デフォルトは-ruだ。次に示す例では、先の例で使ったtestdirを利用してテストしている。最後の例は、diffコマンドライン・オプションのデフォルトを変更し、diffで追加されたものだけが表示されるようにしている。
$ ls -l testdir
-rw-rw-r-- 1 ben ben 29 2008-01-17 18:11 df1.txt
-rw-rw-r-- 1 ben ben 29 2008-01-17 18:11 df2.txt
drwxrwxr-x 2 ben ben 4096 2008-01-17 18:11 subdir1
$ ls -l testdir/subdir1/
-rw-rw-r-- 1 ben ben 29 2008-01-17 18:11 subfileb.txt
$ apack testdir-first.tar.gz testdir
testdir/
testdir/df1.txt
testdir/subdir1/
testdir/subdir1/subfileb.txt
testdir/df2.txt
$ mv testdir/df2.txt testdir/subdir1/
$ date >>testdir/subdir1/subfileb.txt
$ date >testdir/newfileA.txt
$ apack testdir-second.tar.gz testdir
testdir/
testdir/newfileA.txt
testdir/df1.txt
testdir/subdir1/
testdir/subdir1/subfileb.txt
testdir/subdir1/df2.txt
$ adiff testdir-first.tar.gz testdir-second.tar.gz
Only in Unpack-1710/testdir: df2.txt
Only in Unpack-7823/testdir: newfileA.txt
Only in Unpack-7823/testdir/subdir1: df2.txt
diff -ru Unpack-1710/testdir/subdir1/subfileb.txt Unpack-7823/testdir/subdir1/subfileb.t xt
--- Unpack-1710/testdir/subdir1/subfileb.txt 2008-01-17 18:11:16.000000000 +1000
+++ Unpack-7823/testdir/subdir1/subfileb.txt 2008-01-17 22:39:40.000000000 +1000
@@ -1 +1,2 @@
Thu Jan 17 18:11:16 EST 2008
+Thu Jan 17 22:39:40 EST 2008
$ vi ~/.atoolrc
args_diff -Nuar
$ adiff testdir-first.tar.gz testdir-second.tar.gz |grep ^+
+++ Unpack-9186/testdir/df2.txt 1970-01-01 10:00:00.000000000 +1000
+++ Unpack-9186/testdir/newfileA.txt 2008-01-17 22:39:48.000000000 +1000
+Thu Jan 17 22:39:48 EST 2008
+++ Unpack-9186/testdir/subdir1/df2.txt 2008-01-17 18:11:06.000000000 +1000
+Thu Jan 17 18:11:06 EST 2008
+++ Unpack-9186/testdir/subdir1/subfileb.txt 2008-01-17 22:39:40.000000000 +1000
+Thu Jan 17 22:39:40 EST 2008
以上のように、ネイティブのコマンドが異なる圧縮方式やアーカイブ形式でも、atoolを使えば同じコマンドで操作することができる。
Ben Martin 10年以上にわたってファイルシステムを研究。博士課程を修了し、現在、libferris、ファイルシステム、検索ソリューションを中心にコンサルティングをしている。
