Bash

’ls’ 顯示目錄中的兩個相同文件

  • September 7, 2019

所以不知何故,該命令ls似乎向我顯示了一個目錄中的兩個相同文件。

$ 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

我可以移動、重命名、編輯等其中一個文件,但另一個文件似乎並不存在。bash選項卡完成甚至顯示相同的文件。

例如,輸入以下內容然後點擊TAB

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

如果我重命名文件:

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

選項卡完成仍然顯示文件:

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

但是原始的、未修改的文件不會出現在“ls”中

$ ls -Blah /System/Library/LaunchDaemons/tftp.plist
ls: /System/Library/LaunchDaemons/tftp.plist: No such file or 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:35 tftp.plist
-rw-r--r--    1 root  wheel   715B Jun 18 10:36 tftp.plist.derp

知道這裡發生了什麼以及如何擺脫這個幽靈文件嗎?

這是一個執行 OS X 的 mac,如果這會為問題添加任何資訊。sed在瘋狂開始之前,我正在使用這個文件。

編輯

我已經使用了blahBlah ls標誌,但明顯的輸出沒有變化。

編輯 2

評論中要求的其他資訊:

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

更多的:

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

更:

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

筆記

下面的答案幫助我看到名稱中有一個尾隨空格。

您要麼有尾隨空格,要麼有損壞的文件系統。

嘗試

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

那應該輸出類似

'tftp.plist'
'tftp.plist '

注意引號和多餘的空格。如果它兩次輸出完全相同的內容,則您的文件系統可能已損壞。

嘗試

ls -i tftp.plist*

這將為您提供文件的 inode 編號。如果它們相同,則您的目錄中有兩次相同的文件。那將是非常糟糕(tm),您應該盡快執行 fsck。但我懷疑這是問題所在。它更有可能是空白的東西。

引用自:https://unix.stackexchange.com/questions/210589