created: 2023-09-24T01:25:31.228Z

Linux から macOS にコピーして変になったファイル名のエンコーディングを直すための convmv が便利だった

趣味で録画サーバを運用している。

録画サーバで録画された mp4 ファイルについて、こんな操作をしたらどこかでファイル名のエンコーディングがおかしくなってしまった。

  1. Linux で生成された濁点含みのマルチバイト文字を macOS に移動
  2. macOS に移動したファイル外付け HDD を経由して macOS に移動
  3. macOS に移動されたファイルをまた Linux に移動

ドリルドリル のように濁点を含むファイルが見た目は同じに見えるのに、システムからは別なファイルとして認識されてしまう。rsync をするときに不可解な挙動になるので気がついた。たぶん macOS 側でファイル名の濁点が合成済み文字から組合せ文字列にされてしまっている。

macOS がファイル名に使う UTF-8 はなんかおかしいというのは知っていたのだが、解決用のツールは知らなかったので調べた。

iconv 的なことをファイル名でやってくれる。convmv というツールがあるようだ。

RaspberryPI/Raspbian でも簡単に入った。

sudo apt install convmv

使い方

convmv -f UTF-8 -t UTF-8 -r --nfc ./
convmv -f UTF-8 -t UTF-8 -r --nfc --notest ./
  • --nfc オプションで濁点つきのひらがな(カタカナ)の組合せ文字列を合成済み文字にしてくれる
    • --nfd というのもあって、それは逆の操作。macOS の流儀のファイル名にする場合はこっち
  • --notest をつけないデフォルトでドライランになる
  • 今回は UTF-8 の中で NFD => NFC の変換をするので -f-t は両方 UTF-8
    • 両方つけないとエラーになり実行できない

所感

最初 ラッパラッパ という見た目同じファイル名のうち組合せ文字列の方を選択するために ラッハ と打って tab 補完してリネームしようとしてたけど、途中で正気に戻ってちゃんとツールを調べてよかった。