同一父目录中具有相同名称的文件和目录 - Solaris 8,ufs

时间:2008-09-17 13:26:38

标签: file directory filesystems solaris

好的,我已经在Solaris工作了10多年,从未见过这个......

我有一个目录列表,其中包含一个文件和具有相同名称的子目录:

-rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehan
drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan

我使用文件来发现文件的内容,我得到:

bash-2.03# file msheehan
msheehan:       directory
bash-2.03# file msh*
msheehan:      ascii text
msheehan:       directory

我并不担心该文件,但我想保留目录,所以我试试rm:

bash-2.03# rm msheehan
rm: msheehan is a directory

所以这是我的两部分问题:

  1. 这是怎么回事?
  2. 如何仔细删除文件?
  3. 乔纳森

    编辑: 谢谢你们的回答,两个人(到目前为止)都很有帮助,但是将这个列表添加到编辑器中就可以了,ala:

    bash-2.03# ls -l > jb.txt
    bash-2.03# vi jb.txt
    

    其中包含:

    -rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehab^?n
    drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan
    

    请务必小心退格键!

8 个答案:

答案 0 :(得分:6)

我猜这些实际上是两个不同的文件名“看起来”相同,因为命令文件能够在shell传递名称的扩展版本时区分它们。尝试将ls管道输入od或其他十六进制/ octal dump实用程序,以查看它们是否真的具有相同的名称,或者是否涉及非打印字符。

答案 1 :(得分:1)

我想知道是什么原因引起的。除了文件系统错误之外,它可能是由某种非ascii字符引起的。在这种情况下,使用具有更简单的字符串语义的另一种语言来执行操作。

看看这个ruby代码段的输出会很有趣:

ruby -e 'puts Dir["msheehan*"].inspect'

答案 2 :(得分:1)

您可以使用iNode删除

如果您在“ls”中使用“-i”选项

$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?
20802 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a\?
$ find . -inum 20802 -exec rm {} \;
$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?

我有一个例子(西班牙语)如何在Solaris上使用iNode删除文件 http://sparcki.blogspot.com/2010/03/como-eliminar-archivos-utilizando-su.html

Urko,

答案 3 :(得分:0)

快速回答我自己问题的第二部分......

我想我可以重命名目录,删除文件,并将目录重新命名为原始目录。

......我仍然有兴趣看看其他人想出什么。

JB

答案 4 :(得分:0)

我怀疑他们中的一个人名字中有一个奇怪的角色。您可以尝试使用shell通配符扩展来查看:type

cat msh*

并按通配符扩展键(在我的shell中为Ctrl-X *)。你应该列出两个名字,其中一个名字中有一个转义字符。

答案 5 :(得分:0)

要查看文件中是否有特殊字符,请尝试ls的-b或-q选项, 假设solaris 8有这些选择。

作为删除文件的另一种解决方案,您可以调出图形文件浏览器 (喘气!)并将不需要的文件拖放到垃圾箱。

另一个解决方案可能是将一个文件移动到另一个名称(没有未知特殊字符的名称),然后使用通配符删除特殊字符目录名称。

mv msheehan temp
rm mshee*
mv temp msheehan

当然,您希望确保只有要删除的文件与通配符匹配。 而且,对于您的特定情况,由于一个是目录而另一个是文件,因此该命令可能已经解决了所有问题:

rmdir msheeha*

答案 6 :(得分:0)

查看非打印字符和空格的一种快捷方法是通过 cat -vet 管道输出,例如:

# ls -l | cat -vet

很好,很容易记住!

答案 7 :(得分:0)

对于第2部分,由于一个名称包含两个额外字符,您可以使用:

mv sheehan abc
mv sheeha??n xyz

完成后,您再次获得了合理的文件名,可以根据需要进行修复。