Condividi tramite


Regolare la distinzione tra maiuscole e minuscole

La sensibilità alle maiuscole 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 di maiuscole: FOO.txt = foo.txt = Foo.txt

Differenze nella sensibilità al maiuscolo/minuscolo tra Windows e Linux

Quando si lavora con file e directory linux e Windows, potrebbe essere necessario modificare la modalità di gestione della distinzione tra maiuscole e minuscole.

Comportamento standard:

  • Il file system di Windows 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 fa distinzione tra maiuscole e minuscole nei nomi di file e directory. FOO.txt e foo.txt verranno considerati come file distinti.

Il file system di Windows supporta l'impostazione della distinzione tra maiuscole e minuscole con attributi di flag per 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 sottosistema Windows per Linux (WSL). Quando si lavora nel file system WSL, si esegue Linux, pertanto, per impostazione predefinita, i file e le directory sono gestiti con distinzione di maiuscole.

Nota

In passato, se si dispone di file il cui nome differisce solo per caso, questi file non sono stati 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 Esplora file di Windows mostrerà entrambi i file, ne verrà aperto solo uno indipendentemente dal tipo selezionato.

Modificare la sensibilità al maiuscolo di file e directory

I passaggi seguenti illustrano come modificare una directory nel file system di Windows in modo che diventi sensibile al maiuscolo/minuscolo e riconosca file e cartelle che differiscono solo per maiuscole e minuscole.

Avvertimento

Alcune applicazioni Windows, usando il presupposto che il file system non faccia distinzione tra maiuscole e minuscole, non usano il formato 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 sensibili alle maiuscole, ciò significa che queste applicazioni non possono più accedere ai file. Inoltre, se le applicazioni Windows 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 di Windows.

Esaminare la sensibilità alle maiuscole e minuscole attuale

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

fsutil.exe file queryCaseSensitiveInfo <path>

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

Modificare la sensibilità alle maiuscole e minuscole

Il supporto per la distinzione tra maiuscole e minuscole nelle directory è stato introdotto 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 (esegui 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. Vedere la sezione relativa alla risoluzione dei problemi per altre informazioni su questa.

Per modificare una directory nel file system di Windows in modo che sia sensibile alle 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 di Windows con l'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 caso.

Ereditarietà di distinzione tra maiuscole e minuscole

Quando si creano nuove directory, tali directory erediteranno la sensibilità rispetto alle maiuscole e minuscole dalla cartella madre.

Avvertimento

Quando si esegue in modalità WSL 1, si verifica un'eccezione a questo criterio di ereditarietà. Quando una distribuzione è in esecuzione in modalità WSL 1, il flag di distinzione tra maiuscole e minuscole per singola directory non viene ereditato; le directory create in una directory sensibile alla distinzione tra maiuscole e minuscole non sono automaticamente sensibili alla distinzione tra maiuscole e minuscole. È necessario contrassegnare esplicitamente ogni directory come sensibile alle maiuscole.

Opzioni di distinzione tra maiuscole e minuscole per il montaggio di un disco nel file di configurazione WSL

La distinzione tra maiuscole e minuscole può essere gestita durante il montaggio di 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 Introduzione al montaggio di un disco Linux in WSL 2.

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

  1. Aprire la distribuzione linux che verrà usata (ad es. Ubuntu).
  2. Modificare le directory fino a visualizzare la cartella etc ( potrebbe essere necessario cd .. dalla directory home).
  3. Elencare i file nella directory etc per verificare se esiste già un file wsl.conf (usare il comando ls o explorer.exe . per visualizzare la directory con Esplora file di Windows).
  4. Se il file wsl.conf 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 file wsl.conf:

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

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

[automount]
options = case = force

Questa opzione è supportata solo per il montaggio delle 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 comandi con privilegi elevati (amministratore): reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1.

È necessario riavviare WSL dopo aver apportato eventuali modifiche al file di wsl.conf affinché tali modifiche siano effettive. È 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 file /etc/fstab per specificare queste opzioni. Per altre opzioni di configurazione WSL, vedere Configurare le impostazioni di avvio per distro con wslconf.

Modifica della sensibilità al maiuscolo di un disco montato in una distribuzione WSL

Le unità in formato NTFS montate su una distribuzione WSL saranno case-insensitive 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), segui i passaggi indicati sopra per il file system Windows. Le unità EXT4 saranno, per impostazione predefinita, sensibili alle 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 alcun riferimento a tale directory, altrimenti la modifica non avrà effetto. 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 con 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, falsi conflitti o file duplicati.

Per altre informazioni, vedere la documentazione di configurazione di Git .

Risoluzione dei problemi

La directory contiene file che presentano maiuscole e minuscole e richiedono distinzione tra maiuscole e minuscole, ma gli strumenti di Windows FS non riconosceranno questi file

Per usare gli strumenti del file system di Windows per lavorare in una directory Linux che contiene file con 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 in formato misto. 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 in essa i tuoi file con lettere miste maiuscole e minuscole.

Errore: Accesso negato

Assicurati di avere le autorizzazioni "Attributi di scrittura", "Crea file", "Crea cartelle" e "Elimina sottocartelle e file" nella directory richiesta per modificare la sensibilità alle maiuscole. Per controllare queste impostazioni, aprire la directory in Esplora file di Windows (dalla riga di comando, usare il comando : explorer.exe .). Fare clic con il pulsante destro del mouse sulla directory e selezionare Proprietà per aprire la finestra Proprietà documento, quindi selezionare Modifica per visualizzare o modificare le autorizzazioni per la directory.

Finestre Proprietà per visualizzare o modificare le autorizzazioni per le 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 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 fsutil.exe.

Risorse aggiuntive