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
  • Diferencia maiúsculas de minúsculas: FOO.txt = foo.txt = Foo.txt

Diferenças entre Windows e a sensibilidade de maiúsculas e minúsculas do Linux

Ao trabalhar com arquivos e diretórios do Linux e Windows, talvez seja necessário ajustar como a confidencialidade de caso é tratada.

Comportamento padrão:

  • Windows sistema de arquivos trata os nomes de arquivo e diretório como insensíveis a maiúsculas de minúsculas. FOO.txt e foo.txt serão tratados como arquivos equivalentes.
  • O sistema de arquivos Linux trata os nomes de arquivo e diretório como diferenciadores de maiúsculas de minúsculas. FOO.txt e foo.txt serão tratados como arquivos distintos.

O sistema de arquivos Windows dá suporte à definição de confidencialidade de maiúsculas e minúsculas com sinalizadores de atributo por diretório. Embora o comportamento padrão não diferencia maiúsculas de minúsculas, você pode atribuir um sinalizador de atributo para diferenciar um caso de diretório, para que ele reconheça arquivos e pastas linux que podem ser diferentes apenas por caso.

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

Observação

No passado, se você tivesse arquivos cujo nome difere apenas por caso, esses arquivos não podiam ser acessados por Windows, pois Windows aplicativos tratam o sistema de arquivos como diferenciação de maiúsculas de minúsculas e não podem distinguir entre arquivos cujos nomes só diferem no caso. Enquanto Windows Explorador de Arquivos mostrará os dois arquivos, apenas um será aberto independentemente do qual você selecionar.

Alterar a confidencialidade 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 seja sensível a maiúsculas de minúsculas e reconheça arquivos e pastas que diferem somente por caso.

Aviso

Alguns aplicativos Windows, usando a suposição de 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 aplicativos transformem nomes de arquivo para usar todos os maiúsculas ou minúsculas. Em diretórios marcados como diferenciais de maiúsculas e minúsculas, isso significa que esses aplicativos não podem mais acessar os arquivos. Além disso, se Windows aplicativos criarem novos diretórios em uma árvore de diretórios em que você estiver usando arquivos confidenciais de maiúsculas e minúsculas, esses diretórios não diferenciam maiúsculas de minúsculas. Isso pode dificultar o trabalho com Windows ferramentas em diretórios confidenciais de caso, portanto, tenha cuidado ao alterar Windows configurações de confidencialidade de maiúsculas e minúsculas do sistema de arquivos.

Inspecionar a confidencialidade de caso 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 NTFS (Windows), a <path> aparência será: C:\Users\user1\case-test ou se você já estiver no user1 diretório, basta executar:fsutil.exe file setCaseSensitiveInfo case-test

Modificar a confidencialidade de maiúsculas e minúsculas

O suporte para confidencialidade de caso por diretório começou no Windows 10, build 17107. Em Windows 10, build 17692, o suporte foi atualizado para incluir inspecionar e modificar o sinalizador de confidencialidade de maiúsculas e minúsculas para um diretório de dentro do WSL. A confidencialidade 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 diferenciais de maiúsculas e minúsculas.

Alterar a confidencialidade de maiúsculas e minúsculas de um diretório requer que você execute permissões elevadas (executadas como Administrador). Alterar o sinalizador de confidencialidade de maiúsculas e minúsculas também requer permissões "Escrever atributos", "Criar arquivos", "Criar pastas" e "Excluir subpastas e arquivos" no diretório. Consulte 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 seja sensível a 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 que não diferencia maiúsculas de 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 alterar o atributo de sinalizador de confidencialidade de maiúsculas e minúsculas nesse diretório. Não é possível desabilitar o sinalizador de confidencialidade de caso em um diretório que contém pastas/arquivos cujos nomes diferem apenas por caso.

Herança de confidencialidade de caso

Ao criar novos diretórios, esses diretórios herdarão a confidencialidade 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á em execução no modo WSL 1, o sinalizador de confidencialidade de caso por diretório não é herdado; os diretórios criados em um diretório diferenciado de maiúsculas e minúsculas não diferenciam maiúsculas de minúsculas. Você deve marcar explicitamente cada diretório como diferenciação de maiúsculas e minúsculas

Opções de confidencialidade de caso para montar uma unidade no arquivo de configuração WSL

A confidencialidade 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, consulte Introdução montar um disco linux no WSL 2.

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

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

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

[automount]
options = case = dir

Confidencialidade de caso 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 diferenciais de maiúsculas e minúsculas: force

[automount]
options = case = force

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

Você precisará reiniciar o WSL depois de fazer alterações no wsl.conf arquivo 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 disponibilizar o disco em /mnt, como /mnt/c, /mnt/d, etc.) com uma configuração específica de confidencialidade de maiúsculas e minúsculas para todas as unidades, use /etc/wsl.conf conforme descrito acima. Para definir as opções de montagem padrão para uma unidade específica, use o /etc/fstab arquivo para especificar essas opções. Para obter mais opções de configuração do WSL, consulte Configurar configurações de inicialização por distribuição com wslconf.

Alterando a confidencialidade 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 diferenciam maiúsculas de minúsculas por padrão. Para alterar a confidencialidade 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. (As unidades EXT4 diferenciam maiúsculas de minúsculas por padrão).

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

fsutil.exe file setCaseSensitiveInfo <path> enable

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

fsutil.exe file setCaseSensitiveInfo <path> disable

Observação

Se você alterar o sinalizador confidencial 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 ou se a alteração não será eficaz. Isso significa que o diretório não deve ser aberto por nenhum processo WSL, inclusive usando o diretório (ou seus descendentes) como o diretório de trabalho atual.

Configurar a confidencialidade de maiúsculas e minúsculas com o Git

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

Para definir o Git como diferenciando 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, consulte a documentação do Git Config.

Solução de problemas

Meu diretório tem arquivos que são maiúsculas e minúsculas e exigem confidencialidade de maiúsculas e minúsculas, mas Windows ferramentas FS não reconhecerão esses arquivos

Para usar Windows ferramentas do sistema de arquivos para trabalhar em um diretório linux que contém arquivos de maiúsculas e minúsculas misturadas, 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 mistos. (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, provavelmente houve alguns arquivos que foram substituídos e não estarão mais disponíveis.)

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

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

Erro: Acesso negado

Verifique se você tem as permissões "Gravar atributos", "Criar arquivos", "Criar pastas" e "Excluir subpastas e arquivos" no diretório necessário para alterar a confidencialidade de maiúsculas e minúsculas. Para verificar essas configurações, abra o diretório em Windows Explorador de Arquivos (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 permissões para o diretório.

Properties windows to view or change permissions on NTFS directories

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

O atributo de confidencialidade de maiúsculas e minúsculas só pode ser definido em diretórios dentro de um sistema de arquivos formatado pelo 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 não diferenciar maiúsculas de minúsculas usando a ferramenta fsutil.exe).

Recursos adicionais