unzip でファイル名文字化け対応

Windowsがデフォルトでzip圧縮形式に対応して以来、メールに添付されるzipファイルが急増した気がする。しかしファイル名の文字コードの関係で、unzip するとファイル名がいつも文字化けしてしまい、下記のようなコマンドで修正していた。

% convmv -f sjis -t utf-8 --notest *

しかし、unzipにはファイル名をiconvで変換するパッチがあって、FreeBSDports にもずいぶん前から取り込まれていたようだ。ただし、コンパイル時にオプションを指定する必要があった。

# cd /usr/ports/archives/unzip
# make -DWITH_ICONV
# make install

使うときは、たいていWindowsで圧縮されたファイルを解凍するので、ほぼ100%こういうコマンドになる。

% unzip -Ocp932 -l [ファイル名]
% unzip -Ocp932 [ファイル名]

でも毎回指定するの面倒なのでエイリアスで指定しておく。

alias unzip="unzip -Ocp932"

しかしこうすると zsh の補完が効かないことに気付いた。"-O" なんてオプションを知らないのでその後が正常に補完できなくなるようだ。補完のルールを変えるのが正当な方法だろうけど、この問題を回避できるオプションがちゃんとあった。

setopt complete_aliases

これで、エイリアス展開後に現れることになる"-Ocp932" は無いものと思って補完してくれるので普段どおりの補完が効く。