'ls' que muestra dos archivos idénticos en un directorio

14

Entonces, de alguna manera, el comando lsparece mostrarme dos archivos idénticos en un directorio.

$ ls -Blah /System/Library/LaunchDaemons
total 32                                                              
drwxr-xr-x  266 root  wheel   8.8K Jun 18 10:41 .
drwxr-xr-x   79 root  wheel   2.6K Mar 31 12:28 ..
[redacted]
-rw-r--r--    1 root  wheel   715B Jun 18 10:36 tftp.plist
-rw-r--r--    1 root  wheel   715B Jun 18 10:35 tftp.plist

Puedo mover, renombrar, editar, etc. uno de los archivos, pero el otro ni siquiera parece estar allí. bashla finalización de la pestaña incluso muestra archivos idénticos.

Por ejemplo, ingresando lo siguiente y luego presionando TAB

$ sudo mv /System/Library/LaunchDaemons/tftp
tftp.plist   tftp.plist

Si cambio el nombre del archivo:

$ sudo mv /System/Library/LaunchDaemons/tftp.plist /System/Library/LaunchDaemons/tftp.plist.derp

La finalización de la pestaña aún muestra el archivo:

$ ls -Blah /System/Library/LaunchDaemons/tf
tftp.plist       tftp.plist.derp 

Pero el archivo original no modificado no parece 'ls'

$ ls -Blah /System/Library/LaunchDaemons/tftp.plist
ls: /System/Library/LaunchDaemons/tftp.plist: No such file or directory

Sin embargo, si solo enumero los archivos como en el primer fragmento de código anterior, he aquí:

$ ls -Blah /System/Library/LaunchDaemons
total 32                                                              
drwxr-xr-x  266 root  wheel   8.8K Jun 18 10:41 .
drwxr-xr-x   79 root  wheel   2.6K Mar 31 12:28 ..
[redacted]
-rw-r--r--    1 root  wheel   715B Jun 18 10:35 tftp.plist
-rw-r--r--    1 root  wheel   715B Jun 18 10:36 tftp.plist.derp

¿Alguna idea de lo que está pasando aquí y cómo puedo deshacerme de este archivo fantasma?

Esta es una Mac que ejecuta OS X si eso agrega información al problema. Estaba usando sedeste archivo justo antes de que comenzara la locura.

Editar

He utilizado tanto los indicadores blahcomo los Blah lsindicadores sin cambios en la salida aparente.

Editar 2

Información adicional solicitada en los comentarios:

$ echo tftp* | xxd
0000000: 7466 7470 2e70 6c69 7374 2020 7466 7470  tftp.plist  tftp
0000010: 2e70 6c69 7374 2e64 6572 700a            .plist.derp.

Más:

$ printf '<%q>\n' tftp*
<tftp.plist\ >
<tftp.plist.derp>

Aún más:

$ locale                                                                                                                      │-rw-r--r--    1 root  wheel   495B Sep  9  2014 org.net-snmp.snmpd.plist
LANG="en_US.UTF-8"                                                                                                            │-rw-r--r--    1 root  wheel   498B Jan 15 23:15 org.ntp.ntpd.plist
LC_COLLATE="en_US.UTF-8"                                                                                                      │-rw-r--r--    1 root  wheel   1.0K Nov 13  2014 org.openldap.slapd.plist
LC_CTYPE="en_US.UTF-8"                                                                                                        │-rw-r--r--    1 root  wheel   572B Sep  9  2014 org.postfix.master.plist
LC_MESSAGES="en_US.UTF-8"                                                                                                     │-rw-r--r--    1 root  wheel   238B Sep  9  2014 shell.plist
LC_MONETARY="en_US.UTF-8"                                                                                                     │-rw-r--r--    1 root  wheel   941B Sep  9  2014 ssh.plist
LC_NUMERIC="en_US.UTF-8"                                                                                                      │-rw-r--r--    1 root  wheel   260B Sep  9  2014 telnet.plist
LC_TIME="en_US.UTF-8"                                                                                                         │-rw-r--r--    1 root  wheel   715B Jun 18 10:36 tftp.plist
LC_ALL="en_US.UTF-8"

Nota

La respuesta a continuación me ayudó a ver que había un espacio final en el nombre.

111 ---
fuente
66
¿Podría ser que tienes un espacio final en el nombre?
fredtantini
Hmmm ... No, la finalización servirá ls test\ ... ¿Qué pasaría si lo usa ls "*tftp.list*"? o usar lscon --show-control-chars?
fredtantini
1
¿Se puede ejecutar algo como echo tftp* | xxdo algún otro hexdump?
choroba
2
¿Cuál es el resultado de printf '<%q>\n' tftp*?
Chris Down
3
Dado que su configuración regional es en_US.UTF-8, ls -bno mostrará espacios en blanco en los nombres de archivo de ninguna manera especial, ya sea en el medio o al final del nombre de archivo. Puede usar una de las respuestas (printf, echo) o filtrar la salida de ls con un programa diseñado para resaltar los espacios en blanco finales comols -1 tftp* | cat -vet
Mark Plotnick

Respuestas:

22

O tiene espacios en blanco al final, o un sistema de archivos corrupto.

Tratar

for i in tftp.plist*
do
    echo "'$i'"
done

Eso debería generar algo como

'tftp.plist'
'tftp.plist '

tenga en cuenta las citas y el espacio extra. Si genera exactamente lo mismo dos veces, es probable que tenga un sistema de archivos corrupto.

Tratar

ls -i tftp.plist*

esto le dará los números de inodo del archivo. Si son iguales, tiene el mismo archivo dos veces en su directorio. Eso sería realmente malo (tm), y debe ejecutar fsck lo antes posible. Pero dudo que ese sea el problema; es más probable lo del espacio en blanco.

Wouter Verhelst
fuente
¿Alguna idea de por qué el espacio en blanco al final no aparecía usando las banderas bo Bcon 'ls'?
111 ---
@datUser: -Bno tiene nada que ver con esto, y no muestra un ejemplo de ls -b. Sin embargo, con -blahustedes debería haber visto una línea que termina tftp.plist \
Steve Jessop
Sí, estaba usando ambos by Bninguno muestra el espacio escapado o el valor del carácter que no se imprime en formato legible. Muy extraño en mi humilde opinión.
111 ---
1
Puede redirigir la salida lsa un archivo y verificarlo con lessun editor de texto ...
Laszlo Valko
1
Para aquellos que todavía se preguntan, el hexdump revela que el nombre es "tftp.plist" (es decir, espacio final).
Joshua