提问人:Jonathan Bourke 提问时间:9/17/2008 最后编辑:Brian Tompsett - 汤莱恩Jonathan Bourke 更新时间:7/1/2015 访问量:2980
同一父目录中同名的文件和目录 - Solaris 8、ufs
File and directory with same name in same parent directory - Solaris 8, ufs
问:
好的,我已经使用 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
因此,这是我的两部分问题:
- 这是怎么回事?
- 如何小心地删除文件?
乔纳森
编辑: 谢谢你们的回答,两者(到目前为止)都很有帮助,但是将列表传递给编辑就行了,唉:
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
始终小心退格键!
答:
以及我自己问题的第 2 部分的快速回答......
我想我可以重命名目录,删除文件,然后再次将目录重命名回原来的目录。
...我仍然有兴趣看看其他人想出什么。
新山
我怀疑其中一个名字中有一个奇怪的字符。您可以尝试使用 shell 通配符扩展来查看: type
cat msh*
并按通配符扩展键(在我的 shell 中是 Ctrl-X *)。您应该列出两个名字,也许其中一个名字中有一个转义字符。
评论
我猜这实际上是两个不同的文件名,它们“看起来”相同,因为当 shell 传入名称的扩展版本时,命令文件能够区分它们。尝试将 ls 管道连接到 od 或其他十六进制/八进制转储实用程序中,以查看它们是否真的具有相同的名称,或者是否涉及非打印字符。
我想知道是什么原因导致的。除了文件系统错误之外,它还可能是由以某种方式通过的非 ascii 字符引起的。在这种情况下,请使用另一种具有更简单字符串语义的语言来执行操作。
看看这个 ruby 片段的输出会很有趣:
ruby -e 'puts Dir["msheehan*"].inspect'
评论
要查看文件中是否有特殊字符,请尝试使用 ls、 -b 或 -q 选项, 假设 Solaris 8 具有这些选项。
作为删除文件的另一种解决方案,您可以调出图形文件浏览器 (倒吸一口凉气!并将不需要的文件拖放到废纸篓。
另一种解决方案可能是将一个文件移动到其他名称(没有未知特殊字符的文件),然后删除带有通配符的特殊字符目录名称。
mv msheehan temp
rm mshee*
mv temp msheehan
当然,您希望确保只有要删除的文件与通配符匹配。 而且,对于您的特定情况,由于一个是目录,另一个是文件,因此此命令可能已经解决了所有问题:
rmdir msheeha*
查看非打印字符和空格的一种快速简便的方法是通过 cat -vet 传输输出,例如:
# ls -l | cat -vet
很好,很容易记住!
对于第 2 部分,由于一个名称包含两个额外的字符,因此可以使用:
mv sheehan abc
mv sheeha??n xyz
一旦你这样做了,你就有了健康的文件名,你可以根据需要进行修复。
您可以使用 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
乌尔科,
评论