しかしながら、Linuxの unzip コマンドは、ZIPに含まれるファイル名を、ヨーロッパ系の文字コードと仮定して、勝手にUTF-8に直して展開します。そのため、多くの日本のZIPファイルはLinuxでは正しく扱うことができません。
これでは後々のトラブルを起こす原因になりかねないので、日本のzipファイルの中に入っている Shift_JISのファイル名を、すべて一括して、UTF-8のファイル名に変換して、tar.gz のアーカイブに変換することにしました。
標準の unzip を使っている限り、日本語を扱うことはできません。まずは、ファイル名の変換を抑制するための改造を行います。そのために、infozip のページ(http://sourceforge.jp/projects/sfnet_infozip/releases/)から、ソースコード "unzip60.tar.gz" をダウンロードします。
% tar xvfz unzip60.tar.gz % cd unzip60 % cp unix/Makefile .
次に、fileio.c の、Ext_ASCII_TO_Native を呼び出している2箇所をコメントアウトします。そして、そのファイルをコンパイルし、インストールします。(デフォルトでは、/usr/local/bin/ にインストールされます。)
% make generic % sudo make install
次に、/tmp ディレクトリに、専用のテンポラリディレクトリを作り(仮に /tmp/arc とします)、次のスクリプトを、パスに通しておきます。
#/bin/sh rm -rf /tmp/arc/* dir=`dirname "$1"` base=`basename "$1" .zip` /usr/local/bin/unzip "$1" -d /tmp/arc/ convmv --notest -r -f sjis -t utf-8 /tmp/arc/* tar cvfz "$dir/$base.tar.gz" --directory=/tmp/arc "."
このスクリプトを使うと、日本語ファイルの .zip ファイルを、コマンド一発で、UTF-8のファイル名を持つ .tar.gz に変換することができます。(ファイル名に空白が含まれる場合は、クォートに注意しましょう)。
0 件のコメント:
コメントを投稿