
Esto no es algo que esté tratando de hacer. Estoy tratando de resolver un problema que ya sucedió.
Uno de nuestros sistemas LIDAR en el campo devolvió una unidad de recolección de datos con archivos duplicados. Cada archivo en el disco tenía un segundo duplicado con exactamente el mismo nombre, hora, fecha y tamaño. Hasta donde yo sé, esto debería ser imposible.
Los archivos están escritos en una PC con Linux (CentOS 7) pero están almacenados en NTFS. Esto se debe a que se procesan en PC con Windows. Hemos ejecutado este software y hemos utilizado los mismos tipos de unidades durante años.
Intenté pensar en formas en que esto podría ocurrir pero no se me ocurrió ninguna. Si de alguna manera se estuvieran ejecutando dos instancias del software de almacenamiento, estarían peleando por el mismo archivo, no escribiendo uno idéntico en el mismo directorio. Esto debería ser imposible.
Entonces pensé que tal vez era una casualidad que el Explorador de archivos de Windows mostrara los archivos. Les pedí que sacaran el disco y lo pusieran en otra PC y seguía mostrando lo mismo. Entonces me pregunté si había personajes ocultos. Sin embargo, cuando transfirieron los datos a su servidor, éste reconoció que los nombres de los archivos eran idénticos y les pidió que omitieran o sobrescribieran cada duplicado.
Lo descartaría como una casualidad, pero el cliente se muestra inflexible en intentar llegar al fondo del asunto. ¿Alguien puede darme alguna idea o incluso una teoría sobre cómo sucedió esto?
Respuesta1
He visto suceder esto: un archivo tenía una "a" normal (ASCII 0x61), el otro tenía una "letra minúscula cirílica a" de aspecto muy similar (U+0430). Hay muchos caracteres en el alfabeto cirílico que se parecen exactamente a los latinos ("e", "o" son otros dos frecuentes)(*).
Una forma de identificar el problema (y el malo): dir
o ls
archivar y mirar el resultado con un editor hexadecimal (en Linux también puedes usar el más corto:) ls * | hd
.
IIRC también es posible utilizar el carácter Unicode "ESPACIO DE ANCHO CERO (U+200B)" en un nombre de archivo.
(*) He escondido algunos en el texto de esta respuesta...