いんちき自己解凍形式

Windowsでは自己解凍形式の圧縮ファイルが使われることがあります。あのexeファイルをダブルクリックするといきなり解凍し始めるアレです。
で、これに相当するものをUNIX環境でも使えないかなと思って、シェルスクリプトを書いてみました。自己解凍形式のtarの圧縮ファイルを作成します。ポイントはtailコマンドでデータの部分を抜き出しているところです。
ファイル: setar

#!/bin/sh
# -*- shell -*-

if [ $# -lt 2 ]; then
    echo 'usage: setar binfile directory or file...'
fi

binfile=$1
shift

cat <<EOF > "$binfile"
#!/bin/sh
tail -n +4 \$0 | tar zxvf -
exit 0
EOF

chmod +x "$binfile"
tar zcvf - $* >> "$binfile"

使い方は以下の通りです。a.binという自己解凍形式の圧縮ファイルを作成・解凍しています。

$ cd /tmp
$ find .
.
./a
./a/a.txt
./a/b.txt
./a/c.txt
$ setar a.bin a
a
a/a.txt
a/b.txt
a/c.txt
tar: ustar vol 1, 4 files, 0 bytes read, 10240 bytes written in 1 secs (10240 bytes/sec)
$ cd /somewhere
$ /tmp/a.bin     
a
a/a.txt
a/b.txt
a/c.txt
tar: ustar vol 1, 4 files, 10240 bytes read, 0 bytes written in 1 secs (10240 bytes/sec)

BUGS: 自己解凍といいつつsh、tar、gzipが必要です。