Regolare la distinzione tra maiuscole e minuscole

La distinzione tra lettere maiuscole (FOO.txt) e lettere minuscole (foo.txt) determina se queste vengono gestite come lettere differenti (case-sensitive) o equivalenti (case-insensitive) nel nome di un file o in una directory.

  • Case-sensitive: FOO.txt ≠ foo.txt ≠ Foo.txt
  • Case-insensitive: FOO.txt = foo.txt = Foo.txt

Differente distinzione tra maiuscole e minuscole in Windows e in 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 case-insensitive. FOO.txt e foo.txt saranno considerati come file equivalenti.
  • Il file system di Linux considera i nomi di file e directory come case-sensitive. FOO.txt e foo.txt saranno considerati come file distinti.

Il file system di Windows supporta l'impostazione della distinzione tra maiuscole e minuscole con flag di attributo per ogni directory. Benché il comportamento standard debba essere case-insensitive, è possibile assegnare un flag di attributo per rendere una directory case sensitive in modo che riconosca i file e le cartelle Linux che differiscono soltanto per le maiuscole e le minuscole.

Ciò può essere particolarmente vero quando si installano unità nel file sottosistema Windows per Linux (WSL). Quando si lavora nel file system WSL, si esegue Linux, pertanto i file e le directory vengono considerati come case-sensitive per impostazione predefinita.

Nota

In passato, se si disponeva di file il cui nome differiva soltanto per le maiuscole e le minuscole, questi file non erano accessibili da Windows in quanto le applicazioni Windows considerano il file system case-insensitive e non possono fare distinzioni tra i file i cui nomi differiscono soltanto per le maiuscole e le minuscole. Mentre File Explorer di Windows mostrerà entrambi i file, ne verrà aperto solo uno, a prescindere da quello selezionato.

Modificare la distinzione tra maiuscole e minuscole di file e directory

I passaggi seguenti illustrano come rendere una directory nel file system di Windows case-sensitive affinché riconosca file e cartelle che differiscono soltanto per le maiuscole e le minuscole.

Avviso

Alcune applicazioni Windows, adottando il presupposto che il file system non faccia distinzione tra maiuscole e minuscole, non utilizzano le lettere corrette per fare riferimento ai file. Accade spesso ad esempio che le applicazioni trasformino i nomi file in nomi interamente formati da lettere maiuscole o da lettere minuscole. Nelle directory contrassegnate come case-sensitive, ciò significa che tali applicazioni non sono più in grado di accedere ai file. Inoltre, se le applicazioni Windows creano nuove directory in un albero di directory in cui si usano file case-sensitive, queste directory non fanno distinzione tra maiuscole e minuscole. Ciò può rendere difficile lavorare con gli strumenti di Windows nelle directory case-sensitive, quindi prestare attenzione quando si modificano le impostazioni di distinzione tra maiuscole e minuscole del file system di Windows.

Esaminare la distinzione tra maiuscole e minuscole corrente

Per verificare se una directory è case-sensitive nel file system di Windows, eseguire il comando :

fsutil.exe file queryCaseSensitiveInfo <path>

Sostituire <path> con il proprio percorso del file. L’aspetto di una directory nel file system Windows (NTFS), <path> sarà il seguente: C:\Users\user1\case-test o se si è già nella user1 directory, occorre soltanto eseguire: fsutil.exe file setCaseSensitiveInfo case-test

Modificare la distinzione tra maiuscole e minuscole

Il supporto alla distinzione tra maiuscole e minuscole per directory è stato avviato in Windows 10, versione 17107. In Windows 10, versione 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 è esposta tramite un attributo esteso denominato system.wsl_case_sensitive. Il valore di questo attributo sarà 0 per le directory case-insensitive e 1 per le directory case-sensitive.

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

Per modificare una directory nel file system di Windows in modo che sia case-sensitive (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 case-insensitive (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 le maiuscole e le minuscole.

Ereditarietà di distinzione tra maiuscole e minuscole

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

Avviso

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 directory non viene ereditato; le directory create in una directory case-sensitive non sono automaticamente case-sensitive. È necessario contrassegnare in modo esplicito ogni directory come case-sensitive

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

La distinzione tra maiuscole e minuscole può essere gestita durante l'installazione 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 installare un'unità, vedere Introduzione all'installazione di un disco Linux in WSL 2.

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

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

[automount]
options = case = off

Considera tutte le directory nell'unità (NTFS) come case-sensitive: force

[automount]
options = case = force

Questa opzione è supportata solo per l'installazione 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 (admin): reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1.

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

Suggerimento

Per installare 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 installazione 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à installata in una distribuzione WSL

Le unità in formato NTFS installate in una distribuzione WSL saranno case-insensitive per impostazione predefinita. Per modificare la distinzione tra maiuscole e minuscole per una directory in un'unità installata in una distribuzione WSL (ad esempio. Ubuntu), seguire gli stessi passaggi elencati in precedenza per il file system Windows. (Le unità EXT4 saranno case-sensitive per impostazione predefinita).

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 case-insensitive (FOO = foo), usare il comando:

fsutil.exe file setCaseSensitiveInfo <path> disable

Nota

Se si modifica il flag case-sensitive in una directory esistente per un'unità installata mentre WSL è in esecuzione, verificare che WSL non abbia riferimenti a tale directory o 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 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 case-insensitive può causare errori, falsi conflitti o file duplicati.

Per ulteriori informazioni, vedere la documentazione di Git Config.

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 che sia case-sensitive, quindi copiare i file in tale directory (usando git clone o untar). I file rimarranno mescolati. (Si consideri che se si è già provato a spostare i file in una directory case-insensitive 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 che contiene altri file o directory. Provare a creare una nuova directory, modificare l'impostazione, quindi copiare i file con maiuscole e minuscole.

Errore: Accesso negato

Accertarsi 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 Esplora file di Windows (dalla riga di comando, usare il comando: explorer.exe .). Fare clic con il pulsante destro del mouse sulla directory e scegliere Proprietà per aprire la 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 come case-insensitive usando lo strumento fsutil.exe).

Risorse aggiuntive