ファイル名のエンコーディングを変更する -- 2009-09-04
概要
Vine 4.2 -> 5.0のバージョンアップの時のようにシステムのエンコーディングがEUCからUTF-8に変更されたりすると、日本語名のファイルの扱いが問題になります。実際のところ、Linuxで日本語ファイル名を扱うことはあまりないと思いますが、私の場合、SMBサーバとしても使っているためWindowsでのファイルが日本語名だったりします。そんなわけで文書ファイル名などが日本語になっているわけです。
その場合、システムに合わせてEUC-JPになっているのでVine 5.0にアップグレードしたときにはUTF-8のファイル名にしたいところです。
実際の手順
実際の手順にはconvmvコマンドを使います。おそらく標準の環境で導入されていると思われますが、ない場合はaptでconvmvパッケージをインストールします(Vine 5.0の場合)。
ファイルに何かあったときのために重要なファイルはバックアップをとることをおすすめします。
ファイル名の変更は以下の通り。
% convmv -f euc-jp -t utf-8 * Starting a dry run without changes... mv "./Nob??ス・dot" "./Nob文書.dot" No changes to your files done. Use --notest to finally rename the files.
という感じです。この状態では実際にどのように変更されるかを示されるだけなので、
% convmv -f euc-jp -t utf-8 * --notest
というように--notestオプションを付けることで実際にリネームされます。
その他私が使ったオプションは以下の通り。
-r | ディレクトリを再帰的に検索する |
---|---|
--preserve-mtimes | ディレクトリの更新時間(mtime)を変更しない |
あといろいろありますが、使ったことありません(^^;。
% convmv -r --preserve-mtimes --notest -f euc-jp -t utf-8 ./*
でOK、のはず。
なお、多ディレクトリ階層の日本語ファイル名をテストモードでファイル名を見たとき、親ディレクトリが変換されていないように見えましたが、実際に変換したら問題ありませんでした。
2010-12-17追記
ファイル名によってはなぜか、
% convmv -r -f euc-jp -t utf8 * --notest file or directory not found: エノヘ%ノ.doc
というエラーが出ました。
そのときは環境変数LANGをja_JP.euc-jpに変更することで変換可能でした。
% setenv LANG ja_JP.euc-jp -- (csh環境) % convmv -r -f euc-jp -t utf8 * --notest
同じようなエラーが出るときはLANGをファイル名のエンコーディングにあわせるといいのかもしれません(あまり深くは追究してません)。