Ajustar a diferenciação de maiúsculas e minúsculas

A diferenciação de maiúsculas e minúsculas determina se letras maiúsculas (FOO.txt) e minúsculas (foo.txt) serão tratadas como distintas (diferenciação de maiúsculas e minúsculas) ou equivalentes (sem diferenciação de maiúsculas e minúsculas) em um nome de arquivo ou diretório.

  • Diferencia maiúsculas de minúsculas: FOO.txt ≠ foo.txt ≠ Foo.txt
  • Não diferencia maiúsculas de minúsculas: FOO.txt = foo.txt = Foo.txt

Diferenças entre a diferenciação de maiúsculas e minúsculas do Windows e do Linux

Ao trabalhar com arquivos e diretórios do Linux e do Windows, talvez seja necessário ajustar a forma como a diferenciação de maiúsculas e minúsculas é tratada.

Comportamento padrão:

  • O sistema de arquivos Windows não diferencia maiúsculas de minúsculas nos nomes de arquivos e diretórios. FOO.txt e foo.txt serão tratados como arquivos equivalentes.
  • O sistema de arquivos Linux diferencia maiúsculas de minúsculas nos nomes de arquivos e diretórios. FOO.txt e foo.txt serão tratados como arquivos distintos.

O sistema de arquivos Windows dá suporte à definição de diferenciação de maiúsculas e minúsculas com sinalizadores de atributo por diretório. Embora o comportamento padrão seja não diferenciar maiúsculas de minúsculas, você pode atribuir um sinalizador de atributo para fazer com que um diretório diferencie maiúsculas de minúsculas, de modo que ele reconheça os arquivos e pastas do Linux que podem diferir apenas por maiúsculas e minúsculas.

Isso pode ser especialmente verdadeiro ao montar unidades no sistema de arquivos WSL (Subsistema do Windows para Linux). Ao trabalhar no sistema de arquivos WSL, você está executando o Linux e, portanto, os arquivos e diretórios são tratados como diferenciando maiúsculas de minúsculas por padrão.

Observação

No passado, se você tivesse arquivos cujo nome diferisse apenas em maiúsculas e minúsculas, esses arquivos não poderiam ser acessados pelo Windows, pois os aplicativos do Windows tratam o sistema de arquivos como não diferenciando maiúsculas de minúsculas e não conseguem distinguir entre arquivos cujos nomes diferem apenas por maiúsculas e minúsculas. Embora o Explorador de Arquivos do Windows mostre os dois arquivos, apenas um será aberto, independentemente do que você selecionar.

Alterar a diferenciação de maiúsculas e minúsculas de arquivos e diretórios

As etapas a seguir explicam como alterar um diretório no sistema de arquivos Windows para que ele diferencie maiúsculas de minúsculas e reconheça arquivos e pastas que se diferem apenas por maiúsculas e minúsculas.

Aviso

Alguns aplicativos do Windows, que pressupõem que o sistema de arquivos não diferencia maiúsculas de minúsculas, não usam o caso correto para se referir aos arquivos. Por exemplo, não é incomum que os aplicativos transformem os nomes de arquivos para usar todas as letras maiúsculas ou minúsculas. Em diretórios marcados como diferenciando maiúsculas de minúsculas, isso significa que esses aplicativos não podem mais acessar os arquivos. Além disso, se os aplicativos do Windows criarem novos diretórios em uma árvore de diretórios em que você estiver usando arquivos que diferenciam maiúsculas de minúsculas, esses diretórios não diferenciarão maiúsculas de minúsculas. Isso pode dificultar o trabalho com as ferramentas do Windows em diretórios que diferenciam maiúsculas de minúsculas, portanto, tenha cuidado ao alterar as configurações de diferenciação de maiúsculas e minúsculas do sistema de arquivos Windows.

Inspecionar a diferenciação de maiúsculas e minúsculas atual

Para verificar se um diretório diferencia maiúsculas de minúsculas no sistema de arquivos Windows, execute o comando:

fsutil.exe file queryCaseSensitiveInfo <path>

Substitua <path> pelo caminho do arquivo. Para um diretório no sistema de arquivos Windows (NTFS), o <path> terá a seguinte aparência: C:\Users\user1\case-test ou user1, se você já estiver no diretório, pode simplesmente executar: fsutil.exe file setCaseSensitiveInfo case-test

Modificar a diferenciação de maiúsculas e minúsculas

O suporte à diferenciação de maiúsculas e minúsculas por diretório começou no Windows 10, build 17107. No Windows 10, build 17692, o suporte foi atualizado para incluir a inspeção e a modificação do sinalizador de diferenciação de maiúsculas e minúsculas para um diretório de dentro do WSL. A diferenciação de maiúsculas e minúsculas é exposta usando um atributo estendido chamado system.wsl_case_sensitive. O valor desse atributo será 0 para diretórios que não diferenciam maiúsculas de minúsculas e 1 para diretórios que diferenciam minúsculas de minúsculas.

Para alterar a diferenciação de maiúsculas e minúsculas de um diretório, é necessário que você tenha permissões elevadas (execute como Administrador). A alteração do sinalizador de diferenciação de maiúsculas e minúsculas também requer permissões de "Gravar atributos", "Criar arquivos", "Criar pastas" e "Excluir subpastas e arquivos" no diretório. Confira a seção de solução de problemas para saber mais sobre isso.

Para alterar um diretório no sistema de arquivos Windows para que ele diferencie maiúsculas de minúsculas (FOO ≠ foo), execute o PowerShell como Administrador e use o comando:

fsutil.exe file setCaseSensitiveInfo <path> enable

Para alterar um diretório no sistema de arquivos Windows de volta para o padrão sem distinção entre maiúsculas e minúsculas (FOO = foo), execute o PowerShell como Administrador e use o comando:

fsutil.exe file setCaseSensitiveInfo <path> disable

Um diretório deve estar vazio para que o atributo de sinalizador de diferenciação de maiúsculas e minúsculas seja alterado nesse diretório. Não é possível desabilitar o sinalizador de diferenciação de maiúsculas e minúsculas em um diretório que contenha pastas/arquivos cujos nomes diferem apenas por maiúsculas e minúsculas.

Herança de diferenciação de maiúsculas e minúsculas

Ao criar novos diretórios, esses diretórios herdarão a diferenciação de maiúsculas e minúsculas do diretório pai.

Aviso

Há uma exceção a essa política de herança ao executar no modo WSL 1. Quando uma distribuição está sendo executada no modo WSL 1, o sinalizador de diferenciação de maiúsculas e minúsculas por diretório não é herdado; os diretórios criados em um diretório que diferencia maiúsculas e minúsculas não diferenciam automaticamente as maiúsculas e minúsculas. Você deve marcar explicitamente cada diretório como diferenciando maiúsculas de minúsculas

Opções de diferenciação de maiúsculas e minúsculas para montagem de uma unidade no arquivo de configuração da WSL

A diferenciação de maiúsculas e minúsculas pode ser gerenciada ao montar uma unidade no Subsistema do Windows para Linux usando o arquivo de configuração WSL. Cada distribuição Linux que você instalou pode ter seu próprio arquivo de configuração WSL, chamado /etc/wsl.conf. Para obter mais informações sobre como montar uma unidade, confira Introdução à montagem de um disco Linux no WSL 2.

Para configurar a opção de diferenciação de maiúsculas e minúsculas no arquivo wsl.conf ao montar uma unidade:

  1. Abra a distribuição do Linux que você usará (por exemplo, Ubuntu).
  2. Mude de diretório até ver a pasta etc (isso pode exigir que você suba para cd .. a partir do diretório home).
  3. Liste os arquivos no diretório etc para ver se um arquivo wsl.conf já existe (use o comando ls ou explorer.exe . para exibir o diretório com o Explorador de Arquivos do Windows).
  4. Se o arquivo wsl.conf ainda não existir, você poderá criá-lo usando: sudo touch wsl.conf ou executando sudo nano /etc/wsl.conf, que criará o arquivo ao salvá-lo no editor Nano.
  5. As opções a seguir estão disponíveis para serem adicionadas ao seu arquivo wsl.conf:

Configuração padrão: dir para habilitar a diferenciação de maiúsculas e minúsculas por diretório.

[automount]
options = case = dir

Diferenciação de maiúsculas e minúsculas indisponível (todos os diretórios em unidades NTFS montadas não diferenciam maiúsculas de minúsculas): off

[automount]
options = case = off

Trate todos os diretórios na unidade (NTFS) como diferenciadores de maiúsculas e minúsculas: force

[automount]
options = case = force

Essa opção só tem suporte para a montagem de unidades em distribuições Linux executadas como WSL 1 e pode exigir uma chave de registro. Para adicionar uma chave de registro, você pode usar esse comando em um prompt de comando com privilégios elevados (administrador): reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1.

Você precisará reiniciar o WSL depois de fazer qualquer alteração no arquivo wsl.conf para que essas alterações entrem em vigor. Você pode reiniciar o WSL usando o comando: wsl --shutdown

Dica

Para montar uma unidade (que usa o plug-in do sistema de arquivos DrvFs para tornar o disco disponível em /mnt, como /mnt/c, /mnt/d etc.) com uma configuração específica de diferenciação de maiúsculas e minúsculas para TODAS as unidades, use /etc/wsl.conf como descrito acima. Para definir as opções de montagem padrão para uma unidade específica, use o arquivo /etc/fstab para especificar essas opções. Para obter mais opções de configuração do WSL, confira Definir as configurações de inicialização por distribuição com wslconf.

Alterar a diferenciação de maiúsculas e minúsculas em uma unidade montada em uma distribuição WSL

As unidades formatadas em NTFS montadas em uma distribuição WSL não fazem distinção entre maiúsculas e minúsculas por padrão. Para alterar a diferenciação de maiúsculas e minúsculas de um diretório em uma unidade montada em uma distribuição WSL (ou seja, Ubuntu), siga as mesmas etapas listadas acima para o sistema de arquivos Windows. (Por padrão, as unidades EXT4 diferenciam maiúsculas de minúsculas).

Para habilitar a diferenciação de maiúsculas e minúsculas em um diretório (FOO ≠ foo), use o comando:

fsutil.exe file setCaseSensitiveInfo <path> enable

Para desabilitar a diferenciação de maiúsculas e minúsculas em um diretório e retornar ao padrão de diferenciação de maiúsculas e minúsculas (FOO = foo), use o comando:

fsutil.exe file setCaseSensitiveInfo <path> disable

Observação

Se você alterar o sinalizador de diferenciação de maiúsculas e minúsculas em um diretório existente para uma unidade montada enquanto o WSL estiver em execução, verifique se o WSL não tem referências a esse diretório, caso contrário a alteração não terá efeito. Isso significa que o diretório não deve ser aberto por nenhum processo WSL, incluindo o uso do diretório (ou de seus descendentes) como o diretório de trabalho atual.

Configurar a diferenciação de maiúsculas e minúsculas com o Git

O sistema de controle de versão do Git também tem uma configuração que pode ser usada para ajustar a diferenciação de maiúsculas e minúsculas dos arquivos com os quais você está trabalhando. Se estiver usando o Git, talvez seja necessário ajustar a configuração git config core.ignorecase.

Para definir o Git para diferenciar maiúsculas de minúsculas (FOO.txt ≠ foo.txt), insira:

git config core.ignorecase false

Para definir o Git para não diferenciar maiúsculas de minúsculas (FOO.txt = foo.txt), insira:

git config core.ignorecase true

Definir essa opção como false em um sistema de arquivos que não diferencia maiúsculas de minúsculas pode levar a erros confusos, conflitos falsos ou arquivos duplicados.

Para obter mais informações, confira a documentação do Git Config.

Solução de problemas

Meu diretório tem arquivos com letras maiúsculas e minúsculas e requer diferenciação de maiúsculas e minúsculas, mas as ferramentas FS do Windows não reconhecem esses arquivos

Para usar as ferramentas do sistema de arquivos Windows para trabalhar em um diretório do Linux que contenha arquivos com letras maiúsculas e minúsculas, você precisará criar um novo diretório e defini-lo para diferenciar maiúsculas de minúsculas e, em seguida, copiar os arquivos para esse diretório (usando git clone ou untar). Os arquivos permanecerão em maiúsculas e minúsculas. (Observe que, se você já tentou mover os arquivos para um diretório que não diferencia maiúsculas de minúsculas e houve conflitos, é provável que alguns arquivos foram substituídos e não estão mais disponíveis.)

Erro: o diretório não está vazio

Não é possível alterar a configuração de diferenciação de maiúsculas e minúsculas em um diretório que contenha outros arquivos ou diretórios. Tente criar um novo diretório, alterar a configuração e, em seguida, copiar seus arquivos em maiúsculas e minúsculas para ele.

Erro: acesso negado

Verifique se você tem as permissões de "Gravar atributos", "Criar arquivos", "Criar pastas" e "Excluir subpastas e arquivos" no diretório necessário para alterar a diferenciação de maiúsculas e minúsculas. Para verificar essas configurações, abra o diretório no Explorador de Arquivos do Windows (na linha de comando, use o comando: explorer.exe .). Clique com o botão direito do mouse no diretório e selecione Propriedades para abrir a janela Propriedades do Documento e, em seguida, selecione Editar para exibir ou alterar as permissões do diretório.

Properties windows to view or change permissions on NTFS directories

Erro: é necessário um volume NTFS local para esta operação

O atributo de diferenciação de maiúsculas e minúsculas só pode ser definido em diretórios dentro de um sistema de arquivos formatado por NTFS. Os diretórios no sistema de arquivos WSL (Linux) diferenciam maiúsculas de minúsculas por padrão (e não podem ser definidos para diferenciar maiúsculas de minúsculas usando a ferramenta fsutil.exe).

Recursos adicionais