|
その昔 jar は偉大なり と書いた。
今でもそう思うが、tar も jar もコマンド体系が複雑である。
そこで、機能を絞ってしまってはどうか、と。
tar のオプション指定には個人ごとに好みがあるのだが、次の三つに集約し、他は無視する。
- cf
- c(reate) f(ile) つまり新しくアーカイブファイルを作る
- tf
- t(able of) f(ile) つまりアーカイブの内容を確認する
- xf
- (e)x(tract from) f(ile) つまりアーカイブから取り出す
多くの人が xvzf のように使うのは知っている(これも流儀によって xzvf だったり zxvf だったり)が、今や(というかもう何年も前から) GNU tar は z なしで x を使える。
v は、要らないだろうといつも思っているが、まあ付けたい人のために -v というオプションを許そう。
ということで、上の三つだけをサブコマンドと思う。
残りは引数のファイル名を見て判断する。
.tar.gz だったら tar 形式で gzip 圧縮し、.jar や .zip だったら zip 形式を使う。
できれば他の形式にも対応する。
ということで、コンセプト実証用シェルスクリプト:
#!/bin/sh -
subcommand=$1
case $subcommand in
cf) ;;
tf) ;;
xf) ;;
*) echo "invalid subcommand";
exit 1 ;;
esac
shift
if [[ $1 == "-v" ]]; then
subcommand="${subcommand}v";
shift
fi
if [[ $1 =~ \.tar(\..*)?$ ]]; then
command=tar;
if [[ $1 =~ \.gz$ ]]; then
subcommand="${subcommand}z"
elif [[ $1 =~ \.bz2$ ]]; then
subcommand="${subcommand}j"
fi;
elif [[ $1 =~ \.([jwe]ar|zip)$ ]]; then
command=jar
else
echo "ambiguous argument $1";
exit 1;
fi
exec $command $subcommand $*
本当は Windows にこそこういうものを用意してもらいたいものである。
|