¿Cómo pueden dos archivos en una de mis carpetas tener el mismo nombre?

12

Descargué dos archivos, ambos se guardaron en el mismo nombre de archivo y luego los transfirí con scp a otra computadora.

¿Por qué no se convirtieron en uno cuando se guardó el segundo?

algo algo
fuente
2
¿Puedes mostrar los resultados de ls -lapor favor?
ryekayo
2
Mejor aún, ls -lb(o ls -lab, si el nombre comienza con .).
G-Man dice 'Reincorporar a Monica' el
1
Además, ¿qué pasó exactamente? ¿Descargó dir1/fooy dir2/fooen la máquina X, luego scplos editó dir42en la máquina Y, y salieron como archivos separados con el mismo nombre? ¿O descargó dos archivos con el mismo nombre en el mismo directorio (en la máquina X), y salieron como archivos separados con el mismo nombre?
G-Man dice 'reinstalar a Monica' el

Respuestas:

39

Tal vez solo parezcan tener el mismo nombre.

Tratar:

$ touch Stéphane Stéphane Stéphane\  St​éphane
$ ls -1
Stéphane
Stéphane
St​éphane
Stéphane 

Se ven más o menos lo mismo.

$ ls -1b
Stéphane
Stéphane
St​éphane
Stéphane\ 

Ligeramente mejor. El carácter de espacio se marca como \ (aunque no todas las lsimplementaciones lo hacen).

$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\ 
St\342\200\213\303\251phane

Ahora estamos hablando (todos los caracteres no ASCII se representan como el valor octal de sus constituyentes de bytes)

También podría hacerlo, y eso funciona para cualquier entrada:

$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $

Aquí, el final de las líneas está marcado con lo $que hace que sea más fácil detectar el espacio final. Sin embargo, eso no ayudará a detectar un archivo llamadoStéphane<newline>Stéphane

$ ls | perl -Mopen=locale -MUnicode::UCD=charinfo -lpe '
       s/[^\41-\177]/"<".charinfo(ord$&)->{name}.">"/ge'
Ste<COMBINING ACUTE ACCENT>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane
St<ZERO WIDTH SPACE><LATIN SMALL LETTER E WITH ACUTE>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane<SPACE>

Aclara lo que sucedió.

Vea también esta otra respuesta para más información sobre el tema.

Stéphane Chazelas
fuente
1
Si no le importa que le pregunte a Stephane, ¿qué hace el comando canalizado LC_ALL=C sed -n 1?
ryekayo
3
sedEl lcomando muestra la entrada en forma visualmente inequívoca. Con LC_ALL = C, nos aseguramos de que solo use caracteres ASCII para eso (aunque al menos con GNU sed, no es necesario).
Stéphane Chazelas
2
@ StéphaneChazelas También puede usar:LC_ALL=C ls -b
vinc17
@ vinc17, buen punto, eso también es mejor que sed para detectar archivos con caracteres de nueva línea, pero no siempre para detectar el espacio final. Lo he agregado a la respuesta.
Stéphane Chazelas
Maldición, TIL que puede tener espacios al final del nombre de un archivo y parece que hay dos archivos de nombres idénticos en el sistema de archivos. Gran respuesta, ls | LC_ALL=C sed -n lrealmente fue un gran ahorro de tiempo en este momento, ¡gracias!
Elijah Lynn