'ls' che mostra due file identici in una directory


14

Quindi in qualche modo il comando lssembra mostrarmi due file identici in una directory.

$ 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 spostare, rinominare, modificare ecc. Uno dei file, ma l'altro non sembra nemmeno essere lì. bashil completamento della scheda mostra anche file identici.

Ad esempio, inserendo quanto segue e quindi premendo TAB

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

Se rinomino il file:

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

Il completamento della scheda mostra ancora il file:

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

Ma il file originale non modificato non sembra 'ls'

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

Tuttavia, se ho appena elencato i file come nel primo frammento di codice sopra, ecco:

$ 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

Hai idea di cosa stia succedendo qui e come posso liberarmi di questo file fantasma?

Questo è un mac che esegue OS X se aggiunge informazioni al problema. Stavo usando sedquesto file poco prima dell'inizio della follia.

modificare

Ho usato entrambe le blahe le Blah lsbandiere con nessun cambiamento in uscita apparente.

Modifica 2

Ulteriori informazioni richieste nei commenti:

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

Di Più:

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

Ancora di più:

$ 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 risposta qui sotto mi ha aiutato a vedere che c'era uno spazio finale nel nome.


6
Potrebbe essere che tu abbia uno spazio finale nel nome?
fredtantini,

Hmmm ... No, il completamento farà ls test\ ... Cosa succede se lo usi ls "*tftp.list*"? o usare lscon --show-control-chars?
fredtantini,

1
Riesci a eseguire qualcosa di simile echo tftp* | xxdo qualche altro hexdump?
Choroba,

2
Qual è l'output di printf '<%q>\n' tftp*?
Chris Down,

3
Dal momento che la tua locale è en_US.UTF-8, ls -bnon mostrerà gli spazi vuoti nei nomi dei file in alcun modo speciale, sia nel mezzo che alla fine del nome del file. È possibile utilizzare una delle risposte (printf, echo) o filtrare l'output di ls con un programma progettato per evidenziare spazi vuoti finali comels -1 tftp* | cat -vet
Mark Plotnick,

Risposte:


22

O hai uno spazio bianco finale o un filesystem corrotto.

Provare

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

Ciò dovrebbe produrre qualcosa di simile

'tftp.plist'
'tftp.plist '

notare le virgolette e lo spazio extra. Se emette due volte la stessa identica cosa, probabilmente hai un filesystem corrotto.

Provare

ls -i tftp.plist*

questo ti darà i numeri di inode del file. Se sono uguali, hai lo stesso file due volte nella tua directory. Sarebbe davvero male (tm), e dovresti eseguire fsck al più presto. Ma dubito che sia questo il problema; è più probabile la cosa degli spazi bianchi.


Qualche idea sul perché lo spazio bianco finale non si presentasse usando i flag bo Bcon 'ls`?
111 ---

@datUser: -Bnon ha nulla a che fare con questo, e tu non ne mostri un esempio ls -b. Tuttavia, con-blah te sicuramente avresti dovuto vedere una riga che termina tftp.plist \
Steve Jessop il

Sì, stavo usando entrambi be Be nessuno dei due mostrava lo spazio di escape o il valore del carattere non stampabile in formato leggibile. IMHO molto strano.
111 ---

1
Puoi reindirizzare l'output di lsin un file e controllarlo con lesso un editor di testo ...
Laszlo Valko,

1
Per quelli che ancora si chiedono, hexdump rivela che il nome è "tftp.plist" (ovvero spazio finale).
Joshua,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.