unzipによる文字化け

 zipファイルを解凍するために利用するunzipコマンド。
 Windowsで作成されたファイルで、日本語を含むファイルなどが存在した場合、適切な処理を行ってくれず、文字化けしたファイルなどが出力されてしまう。

 Debianディストリビューションの場合には、下記のサイトに紹介されているようにパッチの適用などを行う。
http://debian.fam.cx/index.php?Japanese#n96053d8

 RH系ディストリビューションを利用している場合には、こちらで対応済みのパッケージを公開してくれている。
http://d.hatena.ne.jp/t2y-1979/20090628/1246157403

 下記は、Codezineで提供されているサンプルファイルを解凍したときの例。

[root@localhost ~]# unzip sample.zip
Archive: sample.zip
creating: Tv
\[X/codezine7/
inflating: Tv
\[X/codezine7/regist.php
inflating: Tv
\[X/codezine7/search1.php
inflating: Tv
\[X/codezine7/search2.php
inflating: Tv
\[X/codezine7/search3.php
[root@localhost ~]# ls
?T???v???\?[?X Part5 dice.sh map1.html scripts.zip

 日本語を含むディレクトリがzipファイルに含まれていたため、ディレクトリ名が化けてしまっている。
 そこで、上記のサイトで提供されているunzipパッケージを利用する。ソースパッケージで提供されているため、ビルドして利用する。
 ソースパッケージのビルドは、明日、記事をアップする予定。

 出来上がったバイナリパッケージを適用する。

[root@localhost i386]# rpm -Uvh unzip-5.52-3.1ja.i386.rpm

 適用後に解凍。

[root@localhost ~]# unzip sample.zip
Archive: sample.zip
creating: サンプルソース/codezine7/
inflating: サンプルソース/codezine7/regist.php
inflating: サンプルソース/codezine7/search1.php
inflating: サンプルソース/codezine7/search2.php
inflating: サンプルソース/codezine7/search3.php

 きちんと日本語を含むディレクトリ名も出力される。

 なお、文字化けして出力されたファイルやディレクトリを削除する場合、一度、nkfで、変換をして、名前を確認してから、削除をする。

[root@localhost ~]# ls | nkf -w
サンプルソース
[root@localhost ~]# rm -rf `printf "サンプルソース" | nkf -s`

▼追記
ソースパッケージのビルドについては、次の記事に掲載。
http://d.hatena.ne.jp/yosi_zou/20101208/1291736013