Regolare la distinzione tra maiuscole e minuscole

La distinzione tra maiuscole e minuscole (FOO.txt) e lettere minuscole (foo.txt) viene gestita come lettere distinte (con distinzione tra maiuscole e minuscole) o equivalenti (senza distinzione tra maiuscole e minuscole) in un nome file o in una directory.

  • Distinzione tra maiuscole e minuscole: FOO.txt ≠ foo.txt ≠ Foo.txt
  • Senza distinzione tra maiuscole e minuscole: FOO.txt = foo.txt = Foo.txt

Differenze tra maiuscole e minuscole Windows e Linux

Quando si utilizzano sia file Linux che Windows e directory, potrebbe essere necessario modificare la modalità di gestione della distinzione tra maiuscole e minuscole.

Comportamento standard:

  • Windows file system considera i nomi di file e directory come senza distinzione tra maiuscole e minuscole. FOO.txt e foo.txt verranno considerati come file equivalenti.
  • Il file system Linux considera i nomi di file e directory come distinzione tra maiuscole e minuscole. FOO.txt e foo.txt verranno considerati come file distinti.

Il file system Windows supporta l'impostazione della distinzione tra maiuscole e minuscole con i flag di attributo per ogni directory. Anche se il comportamento standard deve essere senza distinzione tra maiuscole e minuscole, è possibile assegnare un flag di attributo per fare distinzione tra maiuscole e minuscole, in modo che riconosca i file e le cartelle Linux che possono differire solo per maiuscole e minuscole.

Ciò può essere particolarmente vero quando si montano unità nel file system di sottosistema Windows per Linux (WSL). Quando si lavora nel file system WSL, si esegue Linux, pertanto i file e le directory vengono considerati come distinzione tra maiuscole e minuscole per impostazione predefinita.

Nota

In passato, se si dispone di file il cui nome è diverso solo per caso, questi file non sono accessibili da Windows, perché le applicazioni Windows considerano il file system senza distinzione tra maiuscole e minuscole e non possono distinguere tra i file i cui nomi differiscono solo nel caso. Mentre Windows Esplora file mostrerà entrambi i file, ne verrà aperto solo uno indipendentemente dalla selezione.

Modificare la distinzione tra maiuscole e minuscole di file e directory

I passaggi seguenti illustrano come modificare una directory nel file system Windows in modo da fare distinzione tra maiuscole e minuscole e riconoscere file e cartelle che differiscono solo per maiuscole e minuscole.

Avviso

Alcune applicazioni Windows, presupponendo che il file system non faccia distinzione tra maiuscole e minuscole, non usi il caso corretto per fare riferimento ai file. Ad esempio, non è raro che le applicazioni trasformino i nomi file in modo da usare tutte le lettere maiuscole o minuscole. Nelle directory contrassegnate come distinzione tra maiuscole e minuscole, ciò significa che queste applicazioni non possono più accedere ai file. Inoltre, se Windows applicazioni creano nuove directory in un albero di directory in cui si usano file con distinzione tra maiuscole e minuscole, queste directory non fanno distinzione tra maiuscole e minuscole. Ciò può rendere difficile lavorare con gli strumenti di Windows nelle directory con distinzione tra maiuscole e minuscole, quindi prestare attenzione quando si modificano le impostazioni di distinzione tra maiuscole e minuscole del file system Windows.

Controllare la distinzione tra maiuscole e minuscole correnti

Per verificare se una directory fa distinzione tra maiuscole e minuscole nel file system Windows, eseguire il comando :

fsutil.exe file queryCaseSensitiveInfo <path>

Sostituire <path> con il percorso del file. Per una directory nel file system Windows (NTFS), l'aspetto <path> sarà simile al seguente: C:\Users\user1\case-test o se si è già nella user1 directory, è possibile eseguire:fsutil.exe file setCaseSensitiveInfo case-test

Modificare la distinzione tra maiuscole e minuscole

Il supporto per la distinzione tra maiuscole e minuscole per directory è iniziato in Windows 10 build 17107. In Windows 10, build 17692, il supporto è stato aggiornato per includere l'ispezione e la modifica del flag di distinzione tra maiuscole e minuscole per una directory dall'interno di WSL. La distinzione tra maiuscole e minuscole viene esposta usando un attributo esteso denominato system.wsl_case_sensitive. Il valore di questo attributo sarà 0 per le directory senza distinzione tra maiuscole e minuscole e 1 per le directory con distinzione tra maiuscole e minuscole.

Per modificare la distinzione tra maiuscole e minuscole di una directory, è necessario eseguire autorizzazioni elevate (eseguire come amministratore). La modifica del flag di distinzione tra maiuscole e minuscole richiede anche le autorizzazioni "Attributi di scrittura", "Crea file", "Crea cartelle" e "Elimina sottocartelle e file" nella directory. Per altre informazioni, vedere la sezione relativa alla risoluzione dei problemi.

Per modificare una directory nel file system Windows in modo che venga fatta distinzione tra maiuscole e minuscole (FOO ≠ foo), eseguire PowerShell come amministratore e usare il comando :

fsutil.exe file setCaseSensitiveInfo <path> enable

Per modificare una directory nel file system Windows al valore predefinito senza distinzione tra maiuscole e minuscole (FOO = foo), eseguire PowerShell come amministratore e usare il comando :

fsutil.exe file setCaseSensitiveInfo <path> disable

Una directory deve essere vuota per modificare l'attributo del flag di distinzione tra maiuscole e minuscole in tale directory. Non è possibile disabilitare il flag di distinzione tra maiuscole e minuscole in una directory contenente cartelle/file i cui nomi differiscono solo per maiuscole e minuscole.

Ereditarietà di distinzione tra maiuscole e minuscol

Quando si creano nuove directory, tali directory erediteranno la distinzione tra maiuscole e minuscole dalla directory padre.

Avviso

Esiste un'eccezione a questo criterio di ereditarietà durante l'esecuzione in modalità WSL 1. Quando una distribuzione è in esecuzione in modalità WSL 1, il flag di distinzione tra maiuscole e minuscole per directory non viene ereditato; le directory create in una directory con distinzione tra maiuscole e minuscole non fanno automaticamente distinzione tra maiuscole e minuscole. È necessario contrassegnare in modo esplicito ogni directory come distinzione tra maiuscole e minuscole

Opzioni di distinzione tra maiuscole e minuscole per il montaggio di un'unità nel file di configurazione WSL

La distinzione tra maiuscole e minuscole può essere gestita quando si monta un'unità nel sottosistema Windows per Linux usando il file di configurazione WSL. Ogni distribuzione Linux installata può avere il proprio file di configurazione WSL, denominato /etc/wsl.conf. Per altre informazioni su come montare un'unità, vedere Attività iniziali montaggio di un disco Linux in WSL 2.

Per configurare l'opzione di distinzione tra maiuscole e minuscole nel file durante il wsl.config montaggio di un'unità:

  1. Aprire la distribuzione di Linux che verrà usata (ad esempio. Ubuntu).
  2. Modificare le directory fino a visualizzare la etc cartella (potrebbe essere necessario passare cd .. dalla home directory).
  3. Elencare i file nella etc directory per verificare se esiste già un wsl.conf file (usare il ls comando o explorer.exe . per visualizzare la directory con Windows Esplora file).
  4. Se il wsl.conf file non esiste già, è possibile crearlo usando: sudo touch wsl.conf o eseguendo sudo nano /etc/wsl.conf, che creerà il file al salvataggio dall'editor Nano.
  5. Sono disponibili le opzioni seguenti per l'aggiunta al wsl.config file:

Impostazione predefinita: dir per abilitare la distinzione tra maiuscole e minuscole per ogni directory.

[automount]
options = case = dir

Distinzione tra maiuscole e minuscole non disponibile (tutte le directory nelle unità NTFS montate non fanno distinzione tra maiuscole e minuscole): off

[automount]
options = case = off

Considerare tutte le directory nell'unità (NTFS) come distinzione tra maiuscole e minuscole: force

[automount]
options = case = force

Questa opzione è supportata solo per il montaggio di unità nelle distribuzioni Linux in esecuzione come WSL 1 e potrebbe richiedere una chiave di registrazione. Per aggiungere una chiave di registrazione, è possibile usare questo comando da un prompt dei reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1comandi con privilegi elevati (amministratore): .

È necessario riavviare WSL dopo aver apportato le modifiche al wsl.conf file per rendere effettive tali modifiche. È possibile riavviare WSL usando il comando : wsl --shutdown

Suggerimento

Per montare un'unità (che usa il plug-in file system DrvFs per rendere disponibile il disco in /mnt, ad esempio /mnt/c, /mnt/d e così via) con un'impostazione specifica di distinzione tra maiuscole e minuscole per TUTTE le unità, usare /etc/wsl.conf come descritto in precedenza. Per impostare le opzioni di montaggio predefinite per un'unità specifica, usare il /etc/fstab file per specificare queste opzioni. Per altre opzioni di configurazione WSL, vedere Configurare le impostazioni di avvio per distribuzione con wslconf.

Modifica della distinzione tra maiuscole e minuscole in un'unità montata in una distribuzione WSL

Le unità in formato NTFS montate in una distribuzione WSL non fanno distinzione tra maiuscole e minuscole per impostazione predefinita. Per modificare la distinzione tra maiuscole e minuscole per una directory in un'unità montata in una distribuzione WSL (ad esempio. Ubuntu), seguire gli stessi passaggi elencati in precedenza per il file system Windows. Per impostazione predefinita, le unità EXT4 faranno distinzione tra maiuscole e minuscole.

Per abilitare la distinzione tra maiuscole e minuscole in una directory (FOO ≠ foo), usare il comando :

fsutil.exe file setCaseSensitiveInfo <path> enable

Per disabilitare la distinzione tra maiuscole e minuscole in una directory e tornare all'impostazione predefinita senza distinzione tra maiuscole e minuscole (FOO = foo), usare il comando :

fsutil.exe file setCaseSensitiveInfo <path> disable

Nota

Se si modifica il flag con distinzione tra maiuscole e minuscole in una directory esistente per un'unità montata mentre WSL è in esecuzione, verificare che WSL non abbia riferimenti a tale directory o che la modifica non sia valida. Ciò significa che la directory non deve essere aperta da alcun processo WSL, incluso l'uso della directory (o dei relativi discendenti) come directory di lavoro corrente.

Configurare la distinzione tra maiuscole e minuscole con Git

Il sistema di controllo della versione git include anche un'impostazione di configurazione che può essere usata per regolare la distinzione tra maiuscole e minuscole per i file usati. Se si usa Git, è possibile modificare l'impostazione git config core.ignorecase .

Per impostare Git per fare distinzione tra maiuscole e minuscole (FOO.txt ≠ foo.txt), immettere:

git config core.ignorecase false

Per impostare Git senza distinzione tra maiuscole e minuscole (FOO.txt = foo.txt), immettere:

git config core.ignorecase true

L'impostazione di questa opzione su false in un file system senza distinzione tra maiuscole e minuscole può causare errori confusi, conflitti falsi o file duplicati.

Per altre informazioni, vedere la documentazione di Git Config.

Risoluzione dei problemi

La directory contiene file con maiuscole e minuscole e richiedono la distinzione tra maiuscole e minuscole, ma Windows strumenti FS non riconosceranno questi file

Per usare Windows strumenti del file system per lavorare in una directory Linux che contiene file di maiuscole e minuscole, è necessario creare una nuova directory e impostarla in modo da fare distinzione tra maiuscole e minuscole, quindi copiare i file in tale directory (usando git clone o untar). I file rimarranno con maiuscole e minuscole. Si noti che se si è già provato a spostare i file in una directory senza distinzione tra maiuscole e minuscole e si sono verificati conflitti, è probabile che alcuni file siano stati sovrascritti e che non saranno più disponibili.

Errore: la directory non è vuota

Non è possibile modificare l'impostazione di distinzione tra maiuscole e minuscole in una directory contenente altri file o directory. Provare a creare una nuova directory, modificare l'impostazione e quindi copiare i file con maiuscole e minuscole.

Errore: Accesso negato

Assicurarsi di disporre delle autorizzazioni "Attributi di scrittura", "Crea file", "Crea cartelle" e "Elimina sottocartelle e file" nella directory necessaria per modificare la distinzione tra maiuscole e minuscole. Per controllare queste impostazioni, aprire la directory in Windows Esplora file (dalla riga di comando, usare il comando : explorer.exe .). Fare clic con il pulsante destro del mouse sulla directory e scegliere Proprietà per aprire il Finestra Proprietà Documento, quindi selezionare Modifica per visualizzare o modificare le autorizzazioni per la directory.

Properties windows to view or change permissions on NTFS directories

Errore: per questa operazione è necessario un volume NTFS locale

L'attributo di distinzione tra maiuscole e minuscole può essere impostato solo nelle directory all'interno di un file system in formato NTFS. Le directory nel file system WSL (Linux) fanno distinzione tra maiuscole e minuscole per impostazione predefinita e non possono essere impostate senza distinzione tra maiuscole e minuscole usando lo strumento di fsutil.exe.

Risorse aggiuntive