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 ~]# 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