長年の経緯からファイルシステム上のファイル名はEUCを使っていました。
そのため、デフォルトのLANG環境変数もja_JP.eucJPとしてきましたが、
2013年ぐらいから
- 漢字コードとしてEUCは使えずUTF-8だけというアプリケーションが増えてきた
- UTF-8な文字列をEUCなファイルにコピーペーストできない(EUCで表現できない文字が使われているためのようです)
そこで、今年(2015年)になり、
ファイルシステムの名前とLANG環境変数をUTF-8に変更することを決断しました。
決断が遅れたのは
ファイルシステム全体の変更になりそれなりの危険性があると考えたためです。
そこで、まず自宅で同様な構成を取っていてるファイルサーバーで変更し、
2ヶ月程度使用して問題ないことを確認し、やっと実行に移すことにしました。
手順は簡単です。
- ファイルシステムとしてZFSを利用していたので、実行前にスナップショットを取得
- ファイル名が変更されるものの一覧を確認する
- 255文字以上のファイル名については警告が表示されるので、 これらは事前に255文字以内になるようにファイル名を変更する
- 変更
zfs snapshot zfsファイルシステム@タグ(私は日時にしています)。
convmv -r --nfc -f euc-jp -t utf8 /ディレクトリ
ファイル名一覧…
convmv --notest -r nfc -f euc-jp -t utf8 /ディレクトリ
--nfcオプションと255文字問題については、以下のblogで解説があります。
ドラえもん問題主要部分を引用します。
http://key2.jp/~yskhashi/wordpress/?p=427
- 古いファイルシステムの制約に合わせているのか、ファイル名の長さが255byteに制限されていた。convmv の中の $maxfilenamelength を1024にしとけばいいだろう。
- でも、たまにファイルが開けなくなって、規則性を見ようとしたら、あんがい簡単に判明した。ファイル名に濁点、半濁点がある時で、これが原因となるNo.1といえば、そう、Unicode Normalization!(シラネーよ)
- 正規化形式 D (Normalization Form D, NFD)
- 正規化形式 C (Normalization Form C, NFC)