zshのalias -sで解凍

zshのalias -sは拡張子に合わせてコマンドを実行できて便利なのだが*1

alias -s 'tar.gz'='tar xzvf'

としても期待通りには動いてくれない(何か間違っているのかな……)
仕方が無いので

function extract() {
    case $1 in
        *.tar.gz|*.tgz) tar xzvf $1 ;;
        *.tar.xz) tar Jxvf $1 ;;
        *.zip) unzip $1 ;;
        *.lzh) lha e $1 ;;
        *.tar.bz2|*.tbz) tar xjvf $1 ;;
        *.tar.Z) tar zxvf $1 ;;
        *.gz) gzip -dc $1 ;;
        *.bz2) bzip2 -dc $1 ;;
        *.Z) uncompress $1 ;;
        *.tar) tar xvf $1 ;;
        *.arj) unarj $1 ;;
    esac
}
alias -s {gz,tgz,zip,lzh,bz2,tbz,Z,tar,arj,xz}=extract

としましたとさ.


これで

$ ./hogefuga.tar.gz

等で解凍できるようになる.
ちなみに他の環境で解凍コマンドを忘れて困りそうだが,今迄もC-rの検索から解凍していたのであまり変わらない気もする.*2

追記(2010/10/21)

コメントでaunpackというのを教えてもらったので,aptitudeからatoolをインストールし,設定は

alias -s {gz,tgz,zip,lzh,bz2,tbz,Z,tar,arj,xz}=aunpack

に変更した.既にあるものを使うのが一番ですね!(おい

*1:参考: http://journal.mycom.co.jp/column/zsh/016/index.html

*2:*.zipと*.tar.gz以外の解凍はまともに覚えていない……