大文字と小文字の区別を調整する

大文字と小文字の区別により、ファイル名またはディレクトリで大文字 (FOO.txt) と小文字 (foo.txt) が別々に処理される (大文字と小文字を区別する) か、同等に処理される (大文字と小文字を区別しない) かが決まります。

  • 大文字と小文字を区別する: FOO.txt ≠ foo.txt ≠ Foo.txt
  • Case-insensitive: FOO.txt = foo.txt = Foo.txt

Windows と Linux の大文字と小文字の区別の違い

Linux と Windows の両方のファイルとディレクトリを使用する場合は、大文字小文字の区別を処理する方法の調整が必要になることがあります。

標準の動作:

  • Windows ファイル システムは、ファイル名とディレクトリ名を大文字と小文字を区別せずに扱います。 FOO.txt と foo.txt は同等のファイルとして扱われます。
  • Linux ファイル システムでは、ファイル名とディレクトリ名で、大文字と小文字が区別されます。 FOO.txt と foo.txt は個別のファイルとして扱われます。

Windows ファイル システムでは、ディレクトリごとの属性フラグを使用した大文字小文字の区別の設定がサポートされています。 標準的な動作では大文字と小文字が区別されませんが、属性フラグを割り当ててディレクトリの大文字と小文字を区別することができます。これにより、大文字と小文字のみが異なる可能性のある Linux のファイルとフォルダーが認識されるようになります。

これは、ドライブを Linux 用 Windows サブシステム (WSL) ファイル システムにマウントする場合に特に当てはまる可能性があります。 WSL ファイル システムで作業している場合、Linux を実行しているため、ファイルとディレクトリでは、既定で大文字と小文字が区別されます。

Note

以前は、名前の大文字と小文字のみが異なるファイルがある場合、これらのファイルには Windows でアクセスできませんでした。これは、Windows アプリケーションはファイル システムを大文字小文字を区別しないものとして扱い、大文字小文字のみが異なるファイルを区別できないためです。 Windows エクスプローラーでは両方のファイルが表示されますが、どちらを選択したかに関係なく、1 つだけが開きます。

ファイルとディレクトリの大文字と小文字の区別を変更する

次の手順では、Windows ファイル システム上のディレクトリを変更し、大文字と小文字を区別するようにして、大文字と小文字のみが異なるファイルやフォルダーを認識するようにする方法について説明します。

警告

一部の Windows アプリケーションでは、ファイル システムで大文字と小文字が区別されないという前提で、ファイルを参照するために大文字小文字の区別が使用されません。 たとえば、アプリケーションでファイル名を変換するときに、すべて大文字またはすべて小文字を使用することは珍しくありません。 大文字と小文字が区別されるディレクトリでは、これらのアプリケーションはファイルにアクセスできなくなることを意味します。 さらに、Windows アプリケーションで、大文字と小文字を区別するファイルを使用しているディレクトリ ツリーに新しいディレクトリが作成された場合、これらのディレクトリでは大文字と小文字が区別されません。 これにより、大文字と小文字が区別されるディレクトリで Windows ツールを使用するのが困難になる可能性があるため、Windows ファイル システムの大文字と小文字の区別の設定を変更する場合は注意が必要です。

現在の大文字と小文字の区別を検査する

Windows ファイル システムのディレクトリで大文字と小文字を区別するかどうかを確認するには、次のコマンドを実行します。

fsutil.exe file queryCaseSensitiveInfo <path>

<path> をファイル パスに置き換えてください。 Windows (NTFS) ファイル システム内のディレクトリの場合、<path>C:\Users\user1\case-test のようになります。または、user1 のディレクトリに既にいる場合は、fsutil.exe file setCaseSensitiveInfo case-test と実行できます。

大文字と小文字の区別を変更する

ディレクトリごとの大文字と小文字の区別のサポートは Windows 10、ビルド 17107 で開始されました。 Windows 10 のビルド 17692 では、WSL 内から行う、ディレクトリの大文字と小文字の区別フラグの検査と変更を含むようにサポートが更新されました。 大文字小文字の区別は、system.wsl_case_sensitive という名前の拡張属性を使用して公開されます。 この属性の値は、大文字と小文字を区別しないディレクトリの場合は 0、大文字と小文字を区別するディレクトリの場合は 1 になります。

ディレクトリの大文字と小文字の区別を変更するには、高度な権限 (管理者として実行) での実行が必要です。 大文字と小文字を区別するフラグを変更するには、ディレクトリに対する "属性の書き込み"、"ファイルの作成"、"フォルダーの作成"、"サブフォルダーとファイルの削除" のアクセス許可も必要です。 詳細については、トラブルシューティングのセクションを参照します

Windows ファイル システム内のディレクトリを変更して大文字と小文字を区別するようにするには (FOO ≠ foo)、管理者として PowerShell を実行し、次のコマンドを使用します。

fsutil.exe file setCaseSensitiveInfo <path> enable

Windows ファイル システム内のディレクトリを大文字小文字を区別しない既定値 (FOO = foo) に戻すには、管理者として PowerShell を実行し、次のコマンドを使用します。

fsutil.exe file setCaseSensitiveInfo <path> disable

ディレクトリの大文字と小文字の区別フラグ属性を変更するには、ディレクトリを空にする必要があります。 大文字と小文字の違いによってのみ名前が異なるフォルダーやファイルを含むディレクトリでは、大文字と小文字の区別フラグを無効にすることはできません。

大文字と小文字の区別の継承

新しいディレクトリを作成すると、そのディレクトリは親ディレクトリから大文字と小文字の区別を継承します。

警告

WSL 1 モードで実行する場合、この継承ポリシーには例外があります。 WSL 1 モードでディストリビューションが実行されている場合、ディレクトリごとの大文字と小文字の区別フラグは継承されません。大文字と小文字が区別されるディレクトリに作成されたディレクトリは、自動的に大文字小文字を区別するようにはなりません。 大文字小文字を区別するディレクトリとして、各ディレクトリを明示的にマークする必要があります。

WSL 構成ファイルでドライブをマウントする場合の大文字と小文字の区別オプション

WSL 構成ファイルを使用して Linux 用 Windows サブシステムにドライブをマウントする場合は、大文字小文字の区別を管理できます。 インストールされている各 Linux ディストリビューションは、/etc/wsl.conf と呼ばれる独自の WSL 構成ファイルを持つことができます。 ドライブをマウントする方法の詳細については、WSL 2 で Linux ディスクをマウントする方法の概要を参照します。

ドライブをマウントするときに wsl.conf ファイルの大文字と小文字の区別を構成するには、次のようにします。

  1. 使用する Linux ディストリビューションを開きます (つまり、Ubuntu)。
  2. etc フォルダーが表示されるまでディレクトリを変更します (cd .. を実行して home までの移動が必要になる場合があります)。
  3. etc ディレクトリ内のファイルを一覧表示して、wsl.conf ファイルが既に存在するかどうかを確認します (ls コマンドを使用するか、explorer.exe . を実行して Windows エクスプローラーでディレクトリを表示します)。
  4. wsl.conf ファイルがまだ存在しない場合は、sudo touch wsl.conf を実行するか、sudo nano /etc/wsl.conf を実行して作成します。これにより、Nano エディターから保存するときにファイルが作成されます。
  5. wsl.conf ファイルに追加する次のオプションを使用できます。

既定の設定: dir ディレクトリごとに大文字と小文字の区別を有効にします。

[automount]
options = case = dir

大文字小文字の区別の使用不可 (マウントされた NTFS ドライブ上のすべてのディレクトリで大文字小文字が区別されません): off

[automount]
options = case = off

(NTFS) ドライブ上のすべてのディレクトリを大文字小文字を区別するものとして扱う: force

[automount]
options = case = force

このオプションは、WSL 1 として実行されている Linux ディストリビューションでドライブをマウントする場合にのみサポートされ、登録キーが必要になる場合があります。 登録キーを追加するには、昇格された (管理者) コマンド プロンプトから次のコマンドを使用します: reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1

これらの変更を有効にするには、wsl.conf ファイルに変更を加えた後に WSL を再起動する必要があります。 次のコマンドを使用して、WSL を再起動できます: wsl --shutdown

ヒント

すべてのドライブに対して特定の大文字と小文字の区別を設定してドライブ (DrvFs ファイル システム プラグインを使用して /mnt/c、/mnt/d などの /mnt の下でディスクを使用できるようにする) をマウントするには、前述のように /etc/wsl.conf を使用します。 1 つの特定のドライブに既定のマウント オプションを設定するには、/etc/fstab ファイルを使用してこれらのオプションを指定します。 WSL 構成オプションの詳細については、wslconf を使用してディストリビューションごとの起動設定を構成する方法に関する記事を参照します。

WSL ディストリビューションにマウントされたドライブの大文字と小文字の区別を変更する

WSL ディストリビューションにマウントされた NTFS 形式のドライブでは、既定では大文字と小文字が区別されません。 WSL ディストリビューション (つまり、Ubuntu) にマウントされたドライブ上のディレクトリの大文字と小文字の区別を変更するには 、Windows ファイル システムの上記と同じ手順に従います。 (既定では、EXT4 ドライブでは大文字と小文字が区別されます)。

ディレクトリで大文字と小文字の区別を有効にする (FOO ≠ foo) には、次のコマンドを使用します。

fsutil.exe file setCaseSensitiveInfo <path> enable

ディレクトリで大文字と小文字の区別を無効にして、大文字と小文字を区別しない既定値 (FOO = foo) に戻すには、次のコマンドを使用します。

fsutil.exe file setCaseSensitiveInfo <path> disable

Note

WSL の実行中にマウントされたドライブの既存のディレクトリに対して大文字と小文字を区別するフラグを変更する場合は、WSL にそのディレクトリへの参照がないことを確認します。そうしないと、変更は有効になりません。 つまり、目的のディレクトリ (またはその子孫) が現在の作業ディレクトリとして使用されていないことを含めて、どの WSL プロセスもそのディレクトリを開かないようにする必要があります。

Git で大文字と小文字の区別を構成する

Git バージョン管理システムにも、作業中のファイルの大文字と小文字の区別を調整するために使用できる構成設定があります。 Git を使用している場合は、git config core.ignorecase の設定の調整が必要になることがあります。

Git で大文字と小文字を区別するように設定するには (FOO.txt ≠ foo.txt)、次のように入力します。

git config core.ignorecase false

Git で大文字と小文字を区別しないように設定するには (FOO.txt = foo.txt)、次のように入力します。

git config core.ignorecase true

大文字と小文字を区別しないファイル システムでこのオプションを false に設定すると、混乱を招くエラー、誤った競合、またはファイルの重複が発生する可能性があります。

詳しくは、Git 構成のドキュメントを参照します。

トラブルシューティング

ディレクトリに大文字と小文字が混在するファイルが含まれており、大文字と小文字の区別が必要ですが、Windows FS ツールはこれらのファイルを認識しません

大文字と小文字を区別するファイルを含む Linux ディレクトリで Windows ファイル システム ツールを使用するには、新しいディレクトリを作成し、それを大文字と小文字を区別するように設定してから、そのディレクトリにファイルをコピーします (git clone または untar を使用)。 ファイルは大文字と小文字が混在したままになります。 (大文字と小文字を区別しないディレクトリへのファイルの移動が既に試行されており、競合が発生した場合は、一部のファイルが上書きされており、使用できなくなる可能性があります)。

エラー: ディレクトリが空ではありません

他のファイルまたはディレクトリが含まれているディレクトリで大文字と小文字の区別の設定を変更することはできません。 新しいディレクトリを作成し、設定を変更してから、大文字と小文字が混在しているファイルをコピーします。

エラー: アクセスが拒否されました

大文字と小文字の区別を変更するために必要なディレクトリに対する "属性の書き込み"、"ファイルの作成"、"フォルダーの作成"、"サブフォルダーとファイルの削除" のアクセス許可があることを確認します。 これらの設定を確認するには Windows エクスプローラーでディレクトリを開きます (コマンド ラインから、コマンド explorer.exe . を使用します)。 ディレクトリを右クリックし、[プロパティ] を選択して [ドキュメントのプロパティ] ウィンドウを開き、[編集] を選択して、ディレクトリのアクセス許可を表示または変更します。

Properties windows to view or change permissions on NTFS directories

エラー: この操作にはローカル NTFS ボリュームが必要です

大文字と小文字の区別属性は、NTFS 形式のファイル システム内のディレクトリに対してのみ設定できます。 WSL (Linux) ファイル システム内のディレクトリでは、既定で大文字と小文字が区別されます (fsutil.exe ツールを使用して大文字と小文字を区別しないように設定することはできません)。

その他のリソース