“ ls”在目录中显示两个相同的文件


14

因此,该命令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"

注意

下面的答案使我看到名称中有一个尾随空格。


6
可能是名称中有尾随空格吗?
fredtantini 2015年

嗯...不,可以完成ls test\ ...如果您使用该ls "*tftp.list*"怎么办?或ls--show-control-chars
fredtantini 2015年

1
您可以运行类似echo tftp* | xxd或其他的十六进制转储吗?
choroba

2
输出是printf '<%q>\n' tftp*什么?
克里斯·

3
由于您的语言环境为en_US.UTF-8ls -b因此无论在文件名的中间还是结尾,都不会以任何特殊方式在文件名中显示空格。您可以使用答案(printf,echo)之一,或使用旨在突出显示尾随空白的程序来过滤ls的输出,例如ls -1 tftp* | cat -vet
Mark Plotnick

Answers:


22

您要么尾随空白,要么文件系统损坏。

尝试

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

那应该输出类似

'tftp.plist'
'tftp.plist '

请注意引号和多余的空间。如果两次输出完全相同的东西,则可能是文件系统损坏。

尝试

ls -i tftp.plist*

这将为您提供文件的inode编号。如果它们相同,则目录中将有两次相同的文件。那真的是Bad(tm),您应该尽快运行fsck。但是我怀疑这是问题所在;更有可能是空格。


知道为什么尾部空白没有使用带有'ls` 的bor B标志吗?
111 ---

@datUser:-B与此无关,并且您没有显示的示例ls -b。但是,-blah您当然应该看到以tftp.plist \结尾的行
Steve Jessop

是的,我同时使用了两者bB并且都没有以可读格式显示转义空间或非打印字符的值。非常奇怪的恕我直言。
111 ---

1
您可以将的输出重定向ls到文件中,然后使用less或文本编辑器进行检查...
Laszlo Valko 2015年

1
对于那些仍然想知道的人,hexdump显示了名称为“ tftp.plist”(即尾随空格)。
约书亚
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.