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:
- Abra a distribuição do Linux que você usará (por exemplo, Ubuntu).
- Mude de diretório até ver a pasta
etc
(isso pode exigir que você suba paracd ..
a partir do diretóriohome
). - Liste os arquivos no diretório
etc
para ver se um arquivowsl.conf
já existe (use o comandols
ouexplorer.exe .
para exibir o diretório com o Explorador de Arquivos do Windows). - Se o arquivo
wsl.conf
ainda não existir, você poderá criá-lo usando:sudo touch wsl.conf
ou executandosudo nano /etc/wsl.conf
, que criará o arquivo ao salvá-lo no editor Nano. - 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.
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
Windows Subsystem for Linux