Linux sensível a maiúsculas e minúsculas e sempre inconveniente?

8

Estou usando o Ubuntu 10 e estou descobrindo rapidamente que é sensível a maiúsculas e minúsculas quando é inconveniente (como no preenchimento automático de caminhos de arquivos com guia no terminal), mas também sensível a maiúsculas e minúsculas ao usar os comandos MV e CP (também inconveniente ao tentar duplicar um nome de arquivo com um caso diferente).

Em essência, eu preciso desse comando para funcionar, mas não funciona.

cp ./filename.txt ./FileName.txt

Acabo com filename.txt:

insira a descrição da imagem aqui

Como posso obter o mesmo arquivo com um caso diferente, mas o mesmo nome no mesmo diretório?

EDIT: O comentário dos Maerics abaixo me ajudou a lembrar que, na verdade, estou desenvolvendo uma unidade compartilhada do Windows executando NTFS, que é sensível a maiúsculas e minúsculas. É por isso que, embora o CP e o MV não gerem um erro, o arquivo não é copiado (ou provavelmente é copiado, mas o Windows substitui o já existente).

anon58192932
fonte
1
Isso é estranho: testei este comando sem surpresa ... Não tenho problemas com casos diferentes no mesmo diretório.
Denys Séguret
5
Observe que esse comportamento pode depender do tipo de sistema de arquivos no qual esses arquivos existem. Por exemplo, o FAT32 pode não diferenciar esses nomes de arquivos.
maerics
UAU. Esta foi a resposta Maerics. Os arquivos são armazenados em uma unidade montada que está executando o NTFS. Esqueci completamente, pois estou desenvolvendo uma plataforma cruzada que estou usando o Windows para armazenar os arquivos.
Anon58192932
1
@advocate: NTFS faz distinção entre maiúsculas e minúsculas, portanto, você poderá montá-lo da maneira que desejar. No entanto, a questão é se é isso que você deseja :)
0xC0000022L
Os testes estão mostrando que o Windows 7 não parece fazer distinção entre maiúsculas e minúsculas.
Anon58192932

Respostas:

4

O NTFS 1 e o VFAT não diferenciam maiúsculas de minúsculas, apenas preservam maiúsculas e minúsculas. Isso significa que, se você criar um arquivo nomeado FileName.txt, o sistema de arquivos preservará o nome de maiúsculas e minúsculas, mas você poderá acessar o arquivo com qualquer combinação de maiúsculas e minúsculas das mesmas letras, como FILENAME.TXT, filename.txtou fileNAME.txt. Isso explica que você não pode ter dois arquivos com a mesma ortografia com apenas uma variação de maiúsculas / minúsculas no mesmo diretório.

O sistema de arquivos exportados SMB precisa implementar esse comportamento para não confundir os clientes Windows.

O ZFS pode ser configurado para se comportar dessa maneira com a casesensitivity=mixedpropriedade

1 Tecnicamente, o NTFS diferencia maiúsculas de minúsculas, mas os sistemas operacionais que montam sistemas de arquivos desse tipo quase sempre são configurados para ocultar esse recurso subjacente e preservar apenas o caso. No entanto, o Windows pode ativar a distinção entre maiúsculas e minúsculas com a modificação dessa chave de registro HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitivee o Linux pode montar esses sistemas de arquivos com vários comportamentos, dependendo das opções ignore_casee de windows_namesmontagem.

jlliagre
fonte
2
NTFS absolutamente é case-sensitive. No entanto, o Win32 não diferencia maiúsculas de minúsculas, portanto, por razões práticas, a maioria das pessoas supõe que o NTFS também não.
Cody Grey
@CodyGray Sim, você está certo, obrigado por apontar esse recurso. O sistema de arquivos NTFS subjacente permite que nomes de arquivos diferentes sejam diferentes apenas para o caso.
jlliagre
11

Você pode ativar a conclusão de nome de arquivo que não diferencia maiúsculas de minúsculas no bash adicionando a seguinte linha a $HOME/.inputrc:

set completion-ignore-case On

Em relação aos nomes dos arquivos: isso depende do sistema de arquivos. Nos sistemas de arquivos Linux, não deve haver problema. Em outros sistemas de arquivos, o comportamento pode ser controlado com opções para o comando mount. Consulte a página do manual mount(8)para obter mais informações sobre as opções disponíveis para montagem.

nosid
fonte
Você está certo. O sistema de arquivos subjacente não era um sistema de arquivos Linux; portanto, enquanto o CP e o MV funcionam, o Windows escolhe manter o caso do arquivo já existente (quando substituído por causa de maiúsculas e minúsculas) que faz com que apareça no terminal Unix, como se o comando não funcionasse. . Além disso, obrigado pela conclusão do caso de ignorar, isso ajudará muito!
Anon58192932
O caso 'On' diferencia maiúsculas de minúsculas? ;)
Arj
Infelizmente isso não irá ajudá-lo em um script.
Sridhar Sarnobat 28/08/19
2

Isso é uma propriedade do sistema de arquivos ou algo mais?

pa-ubuntu-11388$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.3 LTS
Release:        10.04
Codename:       lucid
pa-ubuntu-11388$ ls -l
pa-ubuntu-11388$ touch filename.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt
pa-ubuntu-11388$ cp ./filename.txt ./FileName.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 FileName.txt
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt

Isso funciona bem para mim.

D.Shawley
fonte
Os maerics acima me ajudaram a resolver o problema. Estou desenvolvendo no Ubuntu uma porta windows -> linux, mas os arquivos estão armazenados no computador com Windows e eu esqueci que tinha a unidade montada. O NTFS subjacente estava impedindo a existência de ambos os arquivos ao mesmo tempo.
Anon58192932
1

O Ubuntu não é parcialmente sensível a maiúsculas. É sempre sensível a maiúsculas. filename.txte Filename.txtexistem dois arquivos diferentes e podem ser colocados no mesmo diretório. Portanto, este comando:

cp ./filename.txt ./FileName.txt

funcionará sem nenhum problema no mesmo diretório.

PP
fonte
Isso não acontece. Eu tenho tentado descobrir isso pela última hora.
Anon58192932
2
Pode ser que você não esteja filename.txtno diretório atual?
PP
Está definitivamente lá.
Anon58192932
Os maerics acima me ajudaram a resolver o problema. Estou desenvolvendo no Ubuntu uma porta windows -> linux, mas os arquivos estão armazenados no computador com Windows e eu esqueci que tinha a unidade montada. O NTFS subjacente estava impedindo a existência de ambos os arquivos ao mesmo tempo.
Anon58192932
2
Vi comentários dos Maerics. thx
PP