Como arquivos com exatamente o mesmo nome podem ser criados em uma pasta?

Como arquivos com exatamente o mesmo nome podem ser criados em uma pasta?

Isso não é algo que estou tentando fazer. Estou tentando descobrir um problema que já aconteceu.

Um de nossos sistemas LIDAR em campo retornou uma unidade de coleta de dados com arquivos duplicados. Cada arquivo na unidade tinha uma segunda duplicata com exatamente o mesmo nome, hora, data e tamanho. Até onde sei, isso deveria ser impossível.

Os arquivos são gravados em um PC Linux (CentOS 7), mas são armazenados em NTFS. Isso ocorre porque eles são processados ​​em PCs com Windows. Executamos este software e usamos os mesmos tipos de unidades há anos.

Tentei pensar em maneiras pelas quais isso poderia ocorrer, mas não consegui pensar em nenhuma. Se de alguma forma duas instâncias do software de armazenamento estivessem em execução, elas estariam brigando pelo mesmo arquivo, e não gravando um idêntico no mesmo diretório. Isso deveria ser impossível.

Então pensei que talvez fosse um acaso com o Windows File Explorer exibindo os arquivos. Pedi que retirassem a unidade e a colocassem em outro PC e ainda mostrava o mesmo. Então me perguntei se havia personagens ocultos. No entanto, quando transferiram os dados para o servidor, este reconheceu que os nomes dos ficheiros eram idênticos e solicitou-lhes que ignorassem ou substituíssem cada duplicado.

Eu consideraria isso um acaso, mas o cliente é inflexível em tentar chegar ao fundo da questão. Alguém pode me dar alguma ideia ou mesmo uma teoria sobre como isso aconteceu?

Responder1

Eu vi isso acontecer: um arquivo tinha um "a" regular (ASCII 0x61), o outro tinha uma "letra minúscula cirílica a" (U + 0430) de aparência muito semelhante. Existem muitos caracteres no alfabeto cirílico que se parecem exatamente com os latinos ("e", "o" são outros dois caracteres frequentes)(*).

Uma maneira de identificar o problema (e o vilão): dirou lsarquivar e ver a saída com um editor hexadecimal (no Linux você também pode usar o mais curto: ls * | hd).

IIRC também é possível usar o caractere Unicode "ZERO WIDTH SPACE (U + 200B)" em um nome de arquivo.

(*) Escondi alguns no texto desta resposta...

informação relacionada