地デジサーバー更改でファイル名がNFDになってた件。ありがとうconvmv。

Linux

地デジサーバーのHDDを3TBに拡張してしばらく経ち、流石にディスクがいっぱいになってきたのでバックアップしようと思ったら、ファイル名が変なことになっていた件。

なんかファイル名が変になってました。

[root@astraea video]# ls -l  20140413230000-*
-rw-r--r-- 1 xymon games 3414481380  4月 13 23:30 2014 20140413230000-Sun-GR20_フレイクフレイト.ts
[root@astraea video]# ls -l  20140413230000-Sun-GR20_フレイクフレイト.ts
ls: cannot access 20140413230000-Sun-GR20_フレイクフレイト.ts: そのようなファイルやディレクトリはありません

タブで補完したり、ワイルドカードで当てたりすると引っかかるのに、ファイル名をコピーペーストすると当たらない。だいたい「フレイクフレイト」ってなんだよ。「ブレイクブレイド」だろ。

で、調べたところ、どうやらMac OS Xが、このファイル名正規化、NFDと言うらしいが、これをやってくれるらしい。たしかに、ファイル名が変わってしまっているファイルはすべて、HDD拡張するために一時的にMacでバックアップを取ったファイルだし。

バックアップ・リストアを取った時の手順は、MacからNFSでマウントし、Mac側に接続したHDD(USB3.0接続)にrsyncでバックアップを取るというもの。これが一番スピードが出る処理系だったから。確かに、この過程で特にファイル名は意識しないで操作していた。結果、Mac側に持ってきたときにNFDがかかっていたらしい。困った。

そこで検索すると、convmvという神ツールがあるとのこと。早速試してみた。

[root@astraea video]# /usr/local/bin/convmv -f utf-8 --nfd -t utf-8 --nfc 20140413230000-Sun-GR20_フレイクフレイト.ts
Starting a dry run without changes...
mv "./20140413230000-Sun-GR20_フレイクフレイト.ts"      "./20140413230000-Sun-GR20_ブレイクブレイド.ts"
No changes to your files done. Use --notest to finally rename the files.

おお、いけるじゃん。じゃぁこれで全部変換してしまおう、と思ったら。

[root@astraea video]# /usr/local/bin/convmv -f utf-8 --nfd -t utf-8 --nfc *
Starting a dry run without changes...
./20140629230000-Sun-GR20_さはけふっ!&スヘース☆タンティ アワー〜今夜はWコメティていくしゃんよっ!〜.ts: resulting filename is 315 bytes long (max: 255)
To prevent damage to your files, we won't continue.
First fix this or correct options!

おいおい、255byteって、どんな古い制限だよ、と。convmvはperlスクリプトなので、中身を見てみると、255byteがハードコーディングされていたので、この部分を修正。

# $maxfilenamelength=255;
$maxfilenamelength=4096;
# $maxpathlength=4096; # this might be used somehow, somewhere?

これでうまく行った。

[root@astraea video]# /usr/local/bin/convmv -f utf-8 --nfd -t utf-8 --nfc --notest *

いつのご時世になっても、やっぱり文字コード問題はどこまでもついて回りますなぁ。

コメント

タイトルとURLをコピーしました