Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在同一父目录中具有相同名称的文件和目录-Solaris 8,ufs_File_Directory_Filesystems_Solaris - Fatal编程技术网

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

File 在同一父目录中具有相同名称的文件和目录-Solaris 8,ufs,file,directory,filesystems,solaris,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: direct

好的,我已经在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
    

    始终小心使用退格键

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

    我可以想象我可以重命名目录,删除文件,然后将目录重新命名为原始目录

    。。。我仍然很想看看其他人有什么想法


    JB

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

    cat msh*
    

    然后按通配符扩展键(在我的shell中是Ctrl-X*)。您应该列出两个名称,其中一个可能有转义字符。

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

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

    看看这个ruby代码片段的输出会是什么,这会很有趣:

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

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

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

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

    mv msheehan temp
    rm mshee*
    mv temp msheehan
    
    当然,您需要确保只有要删除的文件与通配符匹配。 对于您的特定情况,由于一个是目录,另一个是文件,此命令可能解决了所有问题:

    rmdir msheeha*
    

    查看非打印字符和空白的一种简单快捷的方法是通过cat-vet进行输出,例如:

    #ls-l |猫兽医
    很好,很容易记住

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

    mv sheehan abc
    mv sheeha??n xyz
    

    完成后,您就又有了一个健全的文件名,可以根据需要进行修复。

    您可以使用iNode进行删除

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

    我举了一个例子(西班牙语),说明如何在Solaris上使用then iNode删除文件


    乌尔科,

    打得好@Jonathan Bourke,什么是“for f in*;echo“t${f}t”;给你了吗?嗯……虽然是第二个“文件”“问题中的结果表明,情况可能并非如此。。。我很困惑。这台服务器上没有安装ruby,而且它是一个关键的生产数据库系统,我想我暂时不使用它。这是个好问题,也是一个占据我头脑的问题。。。JBOh,多有趣的问题啊,很高兴你找到了答案+1.
    mv sheehan abc
    mv sheeha??n xyz
    
    $ 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?