'ls' menampilkan dua file identik dalam direktori

14

Jadi, entah bagaimana, perintah lsitu menunjukkan kepada saya dua file yang identik dalam suatu direktori.

$ 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

Saya dapat memindahkan, mengganti nama, mengedit dll. Salah satu file, tetapi yang lainnya bahkan tidak ada. bashpenyelesaian tab bahkan menunjukkan file yang identik.

Misalnya, memasukkan yang berikut ini lalu memukul TAB

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

Jika saya mengganti nama file:

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

Penyelesaian tab masih menampilkan file:

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

Tetapi file asli dan tidak dimodifikasi tampaknya tidak menjadi 'ls'

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

Namun jika saya hanya mencantumkan file seperti pada cuplikan kode pertama di atas, lihat:

$ 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

Tahu apa yang terjadi di sini dan bagaimana saya bisa menyingkirkan file hantu ini?

Ini adalah mac yang menjalankan OS X jika itu menambahkan info apa pun ke masalahnya. Saya menggunakan sedfile ini tepat sebelum kegilaan dimulai.

Edit

Saya telah menggunakan kedua blahdan Blah lsbendera dengan tidak ada perubahan dalam output jelas.

Edit 2

Info tambahan yang diminta dalam komentar:

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

Lebih:

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

Bahkan lebih lagi:

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

Catatan

Jawaban di bawah ini membantu saya melihat bahwa ada spasi di belakang namanya.

111 ---
sumber
6
Mungkinkah Anda memiliki spasi tambahan di namanya?
fredtantini
Hmmm ... Tidak, penyelesaian akan dilakukan ls test\ ... Apa yang terjadi jika Anda menggunakan ls "*tftp.list*"? atau digunakan lsdengan --show-control-chars?
fredtantini
1
Bisakah Anda menjalankan sesuatu seperti echo tftp* | xxdatau hexdump lainnya?
choroba
2
Apa output dari printf '<%q>\n' tftp*?
Chris Down
3
Karena lokasi Anda adalah en_US.UTF-8, ls -btidak akan menampilkan kosong dalam nama file dengan cara khusus apa pun, baik di tengah atau di akhir nama file. Anda dapat menggunakan salah satu jawaban (printf, gema), atau memfilter output ls dengan program yang dirancang untuk menyorot trailing blank sepertils -1 tftp* | cat -vet
Mark Plotnick

Jawaban:

22

Anda juga memiliki trailing spasi, atau sistem file yang rusak.

Mencoba

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

Itu akan menghasilkan sesuatu seperti

'tftp.plist'
'tftp.plist '

perhatikan kutipan dan ruang ekstra. Jika outputnya sama persis dua kali, Anda mungkin memiliki sistem file yang rusak.

Mencoba

ls -i tftp.plist*

ini akan memberi Anda nomor inode file. Jika sama, Anda memiliki file yang sama dua kali dalam direktori Anda. Itu akan benar-benar buruk (tm), dan Anda harus menjalankan fsck secepatnya. Tapi saya ragu itu masalahnya; itu lebih cenderung pada masalah spasi putih.

Wouter Verhelst
sumber
Adakah ide mengapa spasi spasi tambahan tidak muncul menggunakan bendera batau Bdengan 'ls`?
111 ---
@datUser: -Btidak ada hubungannya dengan ini, dan Anda tidak menunjukkan contoh ls -b. Namun, dengan -blahAnda tentu harus melihat garis yang mengakhiri tftp.plist \
Steve Jessop
Ya saya menggunakan keduanya bdan Bdan tidak menunjukkan ruang keluar atau nilai karakter non-cetak dalam format yang dapat dibaca. IMHO sangat aneh.
111 ---
1
Anda dapat mengarahkan output lske dalam file, dan memeriksanya dengan lessatau editor teks ...
Laszlo Valko
1
Bagi mereka yang masih bertanya-tanya, hexdump mengungkapkan nama "tftp.plist" (yaitu, trailing space).
Joshua