'ls' zeigt zwei identische Dateien in einem Verzeichnis

14

Der Befehl lsscheint mir also zwei identische Dateien in einem Verzeichnis zu zeigen.

$ 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

Ich kann eine der Dateien verschieben, umbenennen, bearbeiten usw., aber die andere scheint noch nicht einmal da zu sein. bashDie Tab-Vervollständigung zeigt sogar identische Dateien an.

Geben Sie beispielsweise Folgendes ein und drücken Sie dann TAB

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

Wenn ich die Datei umbenenne:

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

In der Tab-Vervollständigung wird weiterhin die Datei angezeigt:

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

Die ursprüngliche, nicht geänderte Datei scheint jedoch nicht 'ls' zu sein.

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

Wenn ich jedoch nur die Dateien wie im ersten Codeausschnitt oben aufführe, siehe:

$ 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

Irgendeine Idee, was hier los ist und wie ich diese Geister-Datei loswerden kann?

Dies ist ein Mac, auf dem OS X ausgeführt wird, wenn dadurch weitere Informationen zum Problem hinzugefügt werden. Ich habe seddiese Datei verwendet, kurz bevor die Verrücktheit begann.

Bearbeiten

Ich habe sowohl die blahals auch die Blah lsFlags ohne Änderung der sichtbaren Ausgabe verwendet.

Bearbeiten 2

Zusätzliche Informationen in Kommentaren angefordert:

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

Mehr:

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

Sogar mehr:

$ 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"

Hinweis

Die Antwort unten hat mir gezeigt, dass der Name ein Leerzeichen enthält.

111 ---
quelle
6
Könnte es sein, dass der Name ein Leerzeichen enthält?
Fredtantini
Hmmm… Nein, die Fertigstellung wird reichen ls test\ … Was passiert, wenn Sie verwenden ls "*tftp.list*"? oder verwendung lsmit --show-control-chars?
Fredtantini
1
Kannst du so etwas wie echo tftp* | xxdeinen anderen Hexdump ausführen ?
Choroba
2
Was ist die Ausgabe von printf '<%q>\n' tftp*?
Chris Down
3
Da Ihr Gebietsschema ist en_US.UTF-8, ls -bwerden keine Leerzeichen in Dateinamen in besonderer Weise angezeigt, sei es in der Mitte oder am Ende des Dateinamens. Sie können eine der Antworten (printf, echo) verwenden oder die Ausgabe von ls mit einem Programm filtern, das ls -1 tftp* | cat -vet
Mark Plotnick,

Antworten:

22

Sie haben entweder ein nachgestelltes Leerzeichen oder ein beschädigtes Dateisystem.

Versuchen

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

Das sollte sowas ausgeben

'tftp.plist'
'tftp.plist '

Beachten Sie die Anführungszeichen und den zusätzlichen Platz. Wenn es genau dasselbe zweimal ausgibt, haben Sie wahrscheinlich ein beschädigtes Dateisystem.

Versuchen

ls -i tftp.plist*

Dadurch erhalten Sie die Inode-Nummern der Datei. Wenn sie identisch sind, haben Sie dieselbe Datei zweimal in Ihrem Verzeichnis. Das wäre wirklich schlecht (tm), und Sie sollten fsck so schnell wie möglich ausführen. Aber ich bezweifle, dass das das Problem ist. Es ist eher die Whitespace-Sache.

Wouter Verhelst
quelle
Irgendeine Idee, warum das nachgestellte Leerzeichen nicht mit den Flags boder Bmit "ls" angezeigt wurde?
111 ---
@datUser: -Bhat nichts damit zu tun, und Sie zeigen kein Beispiel für ls -b. Allerdings sollte bei -blahIhnen sicherlich eine Zeile zu sehen sein, die mit tftp.plist \ endete
Steve Jessop
Ja, ich habe sowohl bund Bals auch weder den maskierten Bereich noch den Wert des nicht druckbaren Zeichens in lesbarem Format angezeigt. Sehr seltsam, IMHO.
111 ---
1
Sie können die Ausgabe von lsin eine Datei umleiten und mit lessoder einem Texteditor überprüfen ...
Laszlo Valko
1
Für diejenigen, die sich immer noch fragen, gibt der Hexdump an, dass der Name "tftp.plist" ist (dh Leerzeichen am Ende).
Joshua