調整區分大小寫

區分大小寫會判斷檔案名稱或目錄中的大寫 (FOO.txt) 和小寫 (foo.txt) 字母會視為相異 (區分大小寫) 或相等 (不區分大小寫) 處理。

  • 區分大小寫:FOO.txt ≠ foo.txt ≠ Foo.txt
  • 不區分大小寫:FOO.txt = foo.txt = Foo.txt = Foo.txt

Windows 與 Linux 區分大小寫之間的差異

使用 Linux 和 Windows 檔案和目錄時,您可能需要調整處理大小寫的方式。

標準行為:

  • Windows 檔案系統會將檔案和目錄名稱視為不區分大小寫。 FOO.txt 和 foo.txt 將會被視為對等的檔案。
  • Linux 檔案系統會將檔案和目錄名稱視為區分大小寫。 FOO.txt 和 foo.txt 將會被視為不同的檔案。

Windows 檔案系統支援使用每個目錄的屬性旗標來設定區分大小寫。 雖然標準行為不區分大小寫,但您可以指派屬性旗標來區分目錄大小寫,以便辨識可能只有大小寫不同的 Linux 檔案和資料夾。

當將磁碟機掛接至 Windows 子系統 Linux 版 (WSL) 檔案系統時,情況更是如此。 在 WSL 檔案系統中工作時,您執行的是 Linux,因此預設會將檔案和目錄視為區分大小寫。

注意

在過去,如果您有檔案的名稱只有大小寫不同,則 Windows 無法存取這些檔案,因為 Windows 應用程式將檔案系統視為不區分大小寫,因此無法區分名稱只有大小寫不同的檔案。 雖然 Windows 檔案總管會顯示這兩個檔案,但不論您選取哪一個檔案,則只有一個檔案會開啟。

變更檔案和目錄的區分大小寫

下列步驟說明如何變更 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 組態檔在 Windows 子系統 Linux 版上掛接磁碟機時,可以管理區分大小寫。 您安裝的每個 Linux 發行版本都可以有自己的 WSL 組態檔,稱為 /etc/wsl.conf。 如需如何掛接磁碟機的詳細資訊,請參閱開始在 WSL 2 中掛接 Linux 磁碟

掛接磁碟機時在 wsl.conf 檔案中設定區分大小寫選項:

  1. 開啟您將使用的 Linux 發行版本 (即 Ubuntu)。
  2. 變更目錄,直到看到 etc 資料夾 (可能需要您從 home 目錄向上 cd ..)。
  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 下使用,例如 /mnt/c、/mnt/d 等),請依上述方式使用 /etc/wsl.conf。 若要設定一個特定磁碟機的預設掛接選項,請使用 /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

注意

如果您在 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 工具無法辨識這些檔案

若要使用 Windows 檔案系統工具來處理包含混合大小寫檔案的 Linux 目錄,您必須建立全新的目錄,並將其設定為區分大小寫,然後將檔案複製到該目錄 (使用 git clone 或 untar)。 檔案會維持混合大小寫。 (請注意,如果您已嘗試將檔案移至不區分大小寫的目錄,而且發生衝突,可能會有一些檔案遭到覆寫,且將無法再使用)。

錯誤:目錄不是空的

您無法在包含其他檔案或目錄的目錄上變更區分大小寫設定。 請嘗試建立新的目錄、變更設定,然後將混合大小寫的檔案複製到其中。

錯誤:存取遭拒

確定您對要變更區分大小寫的目錄具有「寫入屬性」、「建立檔案」、「建立資料夾」和「刪除子資料夾和檔案」權限。 若要檢查這些設定,請在 Windows 檔案總管中開啟目錄 (從命令列,使用下列命令:explorer.exe .)。 以滑鼠右鍵按一下目錄,接著選取 [屬性] 以開啟 [文件屬性] 視窗,然後選取 [編輯] 以檢視或變更目錄的權限。

Properties windows to view or change permissions on NTFS directories

錯誤:此作業需要本機 NTFS 磁碟區

區分大小寫屬性只能在 NTFS 格式檔案系統內的目錄上設定。 WSL (Linux) 檔案系統中的目錄預設會區分大小寫 (且無法使用 fsutil.exe 工具設定為不區分大小寫)。

其他資源