Modificare la distinzione tra maiuscole e minuscole

La distinzione tra maiuscole e minuscole determina se le lettere maiuscole (FOO.txt) e minuscole (foo.txt) vengono gestite come 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.text = foo.txt = Foo.txt

Differenze tra la distinzione Windows linux e la distinzione tra maiuscole e minuscole

Quando si lavora con linux e Windows file 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 senza distinzione tra maiuscole e minuscole. FOO.txt e foo.txt verranno trattati come file equivalenti.
  • Linux file system considera i nomi di file e directory con distinzione tra maiuscole e minuscole. FOO.txt e foo.txt verranno trattati come file distinti.

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

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

Nota

In passato, se il nome dei file era diverso solo in base alla distinzione tra maiuscole e minuscole, Windows non era possibile accedere a questi file perché le applicazioni Windows consideravano il file system senza distinzione tra maiuscole e minuscole e non erano in grado di distinguere tra i file i cui nomi differiscono solo per la distinzione tra maiuscole e minuscole. Mentre Windows Esplora file mostra entrambi i file, ne verrà aperto solo uno indipendentemente dal file selezionato.

Modificare la distinzione tra maiuscole e minuscole di file e directory

I passaggi seguenti illustrano come modificare una directory nel Windows file system in modo da fare distinzione tra maiuscole e minuscole e riconoscerà i file e le cartelle che differiscono solo in base alla distinzione tra maiuscole e minuscole.

Avviso

Alcune Windows, presupponendo che il file system non faccia distinzione tra maiuscole e minuscole, non usare la distinzione corretta per fare riferimento ai file. Ad esempio, non è insolito che le applicazioni trasformano i nomi file in modo da usare tutte le lettere maiuscole o minuscole. Nelle directory contrassegnate come con distinzione tra maiuscole e minuscole, ciò significa che queste applicazioni non possono più accedere ai file. Inoltre, se le Windows creano nuove directory in un albero di directory in cui si usano file con distinzione tra maiuscole e minuscole, queste directory non supportano la distinzione tra maiuscole e minuscole. Ciò può rendere difficile l'utilizzo degli strumenti di Windows nelle directory con distinzione tra maiuscole e minuscole, quindi prestare attenzione quando si modificano le impostazioni Windows file system distinzione tra maiuscole e minuscole.

Controllare la distinzione tra maiuscole e minuscole corrente

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), sarà simile al seguente: oppure, se si è già nella directory, è possibile <path> C:\Users\user1\case-test user1 eseguire:fsutil.exe file setCaseSensitiveInfo case-test

Modificare la distinzione tra maiuscole e minuscole

Il supporto per la distinzione tra maiuscole e minuscole per ogni directory è Windows 10, build 17107. In Windows 10, build 17692, il supporto è stato aggiornato per includere il controllo e la modifica del flag di distinzione tra maiuscole e minuscole per una directory da 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.

La modifica della distinzione tra maiuscole e minuscole di una directory richiede l'esecuzione di autorizzazioni elevate (esegui come amministratore). La modifica del flag di distinzione tra maiuscole e minuscole richiede anche le autorizzazioni "Scrivi attributi", "Crea file", "Crea cartelle" ed "Elimina sottocartelle e file" per la directory. Per altre informazioni su , vedere la sezione sulla risoluzione dei problemi.

Per modificare una directory nel Windows file system in modo da fare 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 Windows file system tornare all'impostazione predefinita 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 la distinzione tra maiuscole e minuscole.

Ereditarietà della distinzione tra maiuscole e minuscole

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à quando viene eseguito in modalità WSL 1. Quando una distribuzione è in esecuzione in modalità WSL 1, il flag di distinzione tra maiuscole e minuscole per ogni 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 con 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à sottosistema Windows per Linux utilizzando 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 Introduzione al montaggio di un disco Linux in WSL 2.

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

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

Impostazione predefinita: per abilitare dir 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 fa distinzione tra maiuscole e minuscole): off

[automount]
options = case = off

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

[automount]
options = case = force

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

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

Suggerimento

Per montare un'unità (che usa il plug-in del file system DrvFs per rendere disponibile il disco in /mnt, ad esempio /mnt/c, /mnt/d e così via) con un'impostazione di distinzione tra maiuscole e minuscole specifica per TUTTE le unità, usare come descritto in /etc/wsl.conf 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 di 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

Per impostazione predefinita, le unità formattate con NTFS montate in una distribuzione WSL non fa distinzione tra maiuscole e minuscole. 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 l'Windows file system. Per impostazione predefinita, per le unità EXT4 viene fatto 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 di distinzione tra maiuscole e minuscole in una directory esistente per un'unità montata mentre WSL è in esecuzione, assicurarsi che WSL non abbia riferimenti a tale directory. In caso contrario, la modifica non sarà effettiva. 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 modificare la distinzione tra maiuscole e minuscole per i file in uso. Se si usa Git, è possibile modificare git config core.ignorecase l'impostazione.

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

git config core.ignorecase false

Per impostare Git in modo che non fa 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, falsi conflitti o file duplicati.

Per altre informazioni, vedere la documentazione di Git Config.

Risoluzione dei problemi

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

Per usare gli strumenti Windows file system per lavorare in una directory Linux che contiene file con maiuscole e minuscole misti, è necessario creare una nuova directory e impostarla in modo che sia con distinzione tra maiuscole e minuscole, quindi copiare i file in tale directory (usando git clone o untar). I file rimarranno con maiuscole e minuscole miste. 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 non saranno più disponibili.

Errore: La directory non è vuota

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

Errore: Accesso negato

Assicurarsi di disporre delle autorizzazioni "Attributi di scrittura", "Crea file", "Crea cartelle" ed "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 l'Finestra Proprietà documento, quindi selezionare Modifica per visualizzare o modificare le autorizzazioni per la directory.

Finestre delle proprietà per visualizzare o modificare le autorizzazioni nelle directory NTFS

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 NTFS. Le directory nel file system WSL (Linux) usano la distinzione tra maiuscole e minuscole per impostazione predefinita e non possono essere impostate in modo da non fare distinzione tra maiuscole e minuscole usando lo strumento fsutil.exe.

Risorse aggiuntive