ファイル名に NFD 文字を含むファイルをリストアップするワンライナー

Mac と Windows とでファイルをやり取りする際に問題になる「NFD 文字問題」。Git でファイル名に日本語を含むファイルを扱っている時にやりがちで、過去記事でも何度か取り上げている。

最近気付いたのだが、Mac の VSCode 上のファイルツリーでファイルやディレクトリを作成すると、NFC 形式で扱われるようになったっぽい。ちょっと詳しい情報がないので、もしかしたら .gitconfig

を指定しているおかげなのかどうか分からないが、Finder 上でファイルを作った時は NFD 文字になるが、VSCode 上で作れば NFC 文字 (Windows・Linux と同じ、問題のない状態) になるのだ。

で、今回はカレントディレクトリ配下のファイルやディレクトリの名前に NFD 文字が含まれているかどうかをチェックするワンライナーを探したので、それを紹介する。

# Mac 特有の NFD 文字を含むファイル (Windows・Linux で使われる NFC 形式でないファイル) をリストアップする
$ find . -type f | perl -C -MUnicode::Normalize -n -e 'print if $_ ne NFC($_)'

# ディレクトリ名をチェックする場合は find コマンドの -type オプションを変えるだけ
$ find . -type d | perl -C -MUnicode::Normalize -n -e 'print if $_ ne NFC($_)'

↑ コレでヒットしたファイルやディレクトリは、NFD 文字が含まれている。その場合は、当該ファイルを VSCode ファイルツリー上でリネームした後、再度このワンライナーを実行して、当該ファイルがヒットしなくなることが確認できるだろう。