无法使用“rm”删除文件

在我们的一个服务器(IBM AIX)中,我们有一个path/ data / 1002 /中的文件,我们无法使用“rm”命令删除或删除这些文件。 我们得到的错误信息是“rm:S1208001.002:path名中的文件或目录不存在”。

使用“-f”选项,不显示错误消息,但该文件仍然存在。

这个文件的字节大小为'0',当我使用命令“touch S120801.002”时,我在该目录中看到两个文件名相同的文件。

目录列表如下:

$ ls -l total 56 -rwxrwxrwx 1 oracle dba 0 Feb 09 11:57 S1208001.002 drwxrwxrwx 4 nobody dba 24576 Feb 09 13:36 backup 

我如何删除这个虚假的fie?

谢谢。

更新1

使用touch命令后,目录列表如下:

 $ ls -l total 56 -rwxrwxrwx 1 oracle dba 0 Feb 09 11:57 S1208001.002 -rwxrwxrwx 1 oracle dba 77790 Feb 09 14:30 S1208001.002 drwxrwxrwx 4 nobody dba 24576 Feb 09 13:36 backup 

这听起来像这个文件名可能包含一个不可打印的字符。 这将解释“触摸”做出不同的文件。

尝试类似

  ls -b 

在目录中查看是否是这种情况?

那么你应该能够做到这样的事情:

  rm -i S*2 

即使隐藏字符也应该提示您input文件。

或者,你也许可以使用find来做到这一点…

  find . -name S\*2 -exec /bin/rm -i {} \; 

应该提示你input文件…我不知道AIX的'find'语法是不是很常见,所以这可能不起作用,但'rm -i'部分应该让你在命令出错的时候中止。

你可以尝试inode。 我不确定你有什么特别的字符,但是这可能是值得一试的:

 $ touch badfile^M $ ls -il bad* 99 -rw-r--r-- 1 username group 0 Feb 09 04:39 badfile $ find . -inum 99 -exec /bin/rm {} \; $ ls -li bad* ls: 0653-341 The file bad* does not exist. 

文件末尾有一个空格(或其他一些不可打印的字符)。 尝试在$ ls -l输出中select两行来查看它。 要删除它,你可以尝试完全安全的查找方法:

 dir=/path/to/your/directory absolute_dir_path_x="$(readlink -fn -- "$dir"; echo x)" absolute_dir_path="${absolute_dir_path_x%x}" while IFS= read -rd $'\0' path do file_path="$(readlink -fn -- "$path"; echo x)" file_path="${file_path%x}" echo "START${file_path}END" done < <( find "$absolute_dir_path" -type f -name '*S1208001*' -print0 ) 

那么你可以在while循环结尾添加一个rm -- "${file_path}"

可能文件系统保存文件,直到最后一个进程停止使用它,或者直到fs清除。

我在NFS上看到了一些类似的NetApp-Shares。 等一下,文件就消失了。

我遇到过类似的问题,简单的fsck(然后rm)解决了我的问题