おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

ファイル名に使える文字

ファイル名に使える文字はOSによって違う

Linuxでファイルを作るときにはほとんどの文字がファイル名に使えます。 厳密にいえば、OSというよりもOSの採用しているファイルシステムに依存します。 UBUNTU 23.04ではファイルシステムext4です。 ext4ではスラッシュとヌル以外をファイル名に用いることができます(ウィキペディア参照)。

これに対して、WIndowsはファイル名に使える文字が少ないのです。 次の文字はファイル名に使えません。

  • /
  • \
  • :
  • *
  • "
  • ?
  • <
  • >
  • |
  • NULL

また、WIndowsではLinuxと違い、大文字小文字を区別しません。

(注)

私はほとんどWIndowsを使っていないので、詳しくはないのですが、WSL-2というLinuxファイルシステムWIndowsでマウントする仕組みがあるそうです。 それを使うと上記のような非互換を避けることができるようです。 ただし、このことはNTFSやFATでフォーマットされたHDDやUSBメモリが上記の禁止文字を許すという意味ではありません。

USBメモリのフォーマット

現在、市販のUSBメモリのフォーマットはFAT32が多いといわれています。 また、HDDの場合はFAT32またはNTFSが多いようです。 いずれにしても、これらの製品をそのままLinuxで使うときはファイル名などの注意が必要です。

最も良いのは、上記の禁止文字をファイル名に使わないことです。 そうすれば、無用のトラブルを避けることができます。

仮に禁止文字の入っているファイル名のファイルがLinuxファイルシステムにあったとしましょう。 例えばabc?.txtのように禁止文字?が入ったファイル名のファイルです。 これをFAT32USBメモリにコピーしようとすると、ファイル名が不適当だというエラーがでてコピーできません。 ファイル名を適切に変更してコピーすればコピーは可能です。

fchangeプログラム

以上の問題を解決するために、Linuxファイルシステム上のファイルに対して、(WIndowsの)禁止文字を含むファイル名を変更するプログラムを作ってみました。 fchangeという名前のRubyプログラムです。 先程の禁止文字(ヌルを除く)をすべてアンダースコア(_)に変更します。 例えば

abc?.txt => abc_.txt

プログラムはGitHubにアップロードしてあります。

用途が限られたプログラムですが、HDDにバックアップをとるときなどは便利だと思います。

HDDやUSBのファイルフォーマットを変更する。

HDDやUSBの使い始めのときに、ext4ファイルシステムにフォーマットしておくと上記のような苦労がありません。 その代わり、そのディスクをWIndowsでも使うとなると、単純にはext4を読むことができません。 Windowsで読み込むにはWSL-2を使えば良い(らしい)です。 上記のMicrosoftの「WSL-2でLinuxディスクのマウントを開始する」を参照してください。

もしも、あなたがWindowsを使わずLinuxオンリーならば、ext4でフォーマットするのがベストです。

結論

最も良いのは、HDDやUSBはWindowsのフォーマットで、Linuxシステム上のファイルでも禁止文字を使わないことです。 自分もそうしていたつもりだったのですが、バックアップをとる段階で禁止文字をファイルに使っていたことに気づきました。

もしも読者に同じことが起こったら、fchangeがひとつの解決法を提供します(ただし、問題が発生しても責任はとれないので自己責任でお願いします)。