Bash
’ls’ 顯示目錄中的兩個相同文件
所以不知何故,該命令
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
在瘋狂開始之前,我正在使用這個文件。編輯
我已經使用了
blah
和Blah
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。但我懷疑這是問題所在。它更有可能是空白的東西。