【问题标题】:UNIX:Two directories with same name on the same path? [closed]UNIX:同一路径上的两个同名目录? [关闭]
【发布时间】:2013-11-05 10:19:26
【问题描述】:

当我通过一个 unix 系统时,我发现五个,两个同名的目录列在同一路径上,当我执行 ls -Dl

这是视图,为什么我说五个,两个同名目录.....

//11/# ls -Dl

total 553

drwxrwxr-x  2 root      root          12288 Dec 20  2010 bin

drwxrwxr-x  2 root      root          16384 Sep 28  2010 bin

drwxrwxr-x 11 root      root           4096 Oct 25 06:49 etc

drwxrwxr-x 11 root      root           8192 May 17 07:40 etc

drwxrwxr-x  3 root      root           4096 Sep 28  2010 qnx4

drwxrwxr-x  4 root      root           4096 Jul 26  2010 qnx4

drwxrwxr--  4 root      root           4096 Sep 28  2010 registry

drwxrwxr-x  4 root      root           4096 Aug 31  2008 registry

drwxrwxr-x 16 root      root           4096 Sep 28  2010 usr

drwxrwxr-x 17 root      root           4096 May 27 03:49 usr

这怎么可能?如果我 cd 其中任何一个会发生什么,我最终会进入哪个目录??

还有另一种看待它的方式,当我做ls -liF 时,这里列出的目录出现了不同的 inode。甚至不是符号链接或任何东西。???

请给我解释一下??

【问题讨论】:

  • 你检查过你的文件系统了吗?要找出 cd 的行为,您可以 cd in 并检查 .看看你的结局。
  • 如果你 ls -B 怎么办?这将打印不可打印的字符
  • 即使我最终进入其中一个目录并找出该目录的 inode 并知道我在哪个目录中,我仍然没有第二个目录的内容。 @user2859193
  • B 不是此系统上的有效选项。 @TomasCamin
  • @user2922452 check man ls 应该有打印非打印文件的选项。也许-b

标签: unix path directory


【解决方案1】:

在每一对中,一个目录名称可能包含一个不可打印的字符。尝试使用 mv 将它们都移动到唯一的文件名。一个你不应该完全命名的,然后你可以使用通配符来指定它。

你应该可以通过输入文件名来重命名一个,所以你可以用“mv”临时重命名它。另一个,您可能想要摆脱的,将是您需要通过通配符指定的那个。试试看。

【讨论】:

  • 即使我写了“mv usr xyz”,我怎么知道系统选择的是哪个 usr.... @sdanzig
【解决方案2】:

使用ls -b,如果您发现在您的文件夹或文件后附加任何“\”,那应该是空格。

【讨论】:

    【解决方案3】:

    您应该使用所有这些命令来检查文件名中的各种字符(包括隐藏字符):

    printf "[%s]\n" *
    
    printf "%s\n" * | cat -vte
    
    printf "%s\n" * | od -bc
    

    最后一个也将以八进制和 ascii 格式转储每个转储字符。

    【讨论】:

    • 谢谢。就我而言,最后一个命令让我看到这两个目录具有相同的名称但使用不同的大小写(例如“ABc”和“ABC”),即使ls 将它们显示为相同的名称:“ABC”
    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多