IT @ Floating Log 11.3.2010

2010-03-11 (*)

# star -- simplified tar もしくは *ar

その昔 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 にこそこういうものを用意してもらいたいものである。

posted at 10:08:16    #
3月 2010
  1 2 3 4 5 6
7 8 910111213
14151617181920
21222324252627
28293031   
2月
2010
 4月
2010

Gentoo Linux, Python, PyDS, NZMATH, SIMATH 以外の情報技術系ノンセクション。

Feed Icon Letterimage

Python
Desktop
Server

© 2010, Matsui Fe2+ Tetsushi