'ls' mostrando dois arquivos idênticos em um diretório

14

Então, de alguma forma, o comando lsparece estar me mostrando dois arquivos idênticos em um diretório.

$ 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

Posso mover, renomear, editar etc. um dos arquivos, mas o outro nem parece estar lá. basha conclusão da guia mostra até arquivos idênticos.

Por exemplo, digitando o seguinte e pressionando TAB

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

Se eu renomear o arquivo:

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

A conclusão da guia ainda mostra o arquivo:

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

Mas o arquivo original não modificado não aparece como 'ls'

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

No entanto, se eu apenas listar os arquivos como no primeiro trecho de código acima, veja:

$ 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

Alguma idéia do que está acontecendo aqui e como posso me livrar desse arquivo fantasma?

Este é um Mac executando o OS X se isso adicionar alguma informação ao problema. Eu estava usando sedesse arquivo pouco antes do início da loucura.

Editar

Eu usei blahos Blah lssinalizadores e os sem alteração na saída aparente.

Editar 2

Informações adicionais solicitadas nos comentários:

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

Mais:

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

Ainda mais:

$ 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

A resposta abaixo me ajudou a ver que havia um espaço à direita no nome.

111 ---
fonte
6
Será que você tem um espaço à direita no nome?
Fredtantini
Hmmm… Não, a conclusão fará ls test\ … O que acontecerá se você usar ls "*tftp.list*"? ou usar lscom --show-control-chars?
Fredtantini
1
Você pode executar algo como echo tftp* | xxdou algum outro hexdump?
choroba
2
Qual é o resultado de printf '<%q>\n' tftp*?
Chris Baixo
3
Como sua localidade é en_US.UTF-8, ls -bnão mostrará espaços em branco nos nomes de arquivos de nenhuma maneira especial, seja no meio ou no final do nome do arquivo. Você pode usar uma das respostas (printf, eco), ou filtro de saída de ls com um programa concebido para espaços de destaque arrastando tais comols -1 tftp* | cat -vet
Mark Plotnick

Respostas:

22

Você tem um espaço em branco à direita ou um sistema de arquivos corrompido.

Experimentar

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

Isso deve gerar algo como

'tftp.plist'
'tftp.plist '

observe as aspas e o espaço extra. Se o resultado for exatamente a mesma coisa duas vezes, você provavelmente terá um sistema de arquivos corrompido.

Experimentar

ls -i tftp.plist*

isso fornecerá os números de inode do arquivo. Se eles são iguais, você tem o mesmo arquivo duas vezes em seu diretório. Isso seria muito ruim (tm) e você deve executar o fsck o mais cedo possível. Mas duvido que esse seja o problema; é mais provável o espaço em branco.

Wouter Verhelst
fonte
Alguma idéia de por que o espaço em branco à direita não estava aparecendo usando os sinalizadores bou Bcom 'ls'?
111 ---
@ datUser: -Bnão tem nada a ver com isso, e você não mostra um exemplo de ls -b. No entanto, com -blahvocê certamente deve ter visto uma linha que termina tftp.plist \
Steve Jessop
Sim, eu estava usando tanto be Bnem mostrar o espaço escapado ou o valor do carácter não imprimir em formato legível. IMHO muito estranho.
111 ---
1
Você pode redirecionar a saída lspara um arquivo, e verificá-lo com lessou um editor de texto ...
Laszlo Valko
1
Para aqueles que ainda se perguntam, o hexdump revela que o nome é "tftp.plist" (ou seja, espaço à direita).
Joshua