rm -rf 不适用于空目录

rm -rf 不适用于空目录

在终端中我尝试删除一个目录但是不起作用:

myuser$ rm -rf foo/
rm: foo/: Directory not empty

在我的主目录中只有 foo :

myuser$ ls
foo

我的“ls -la”命令没有任何问题:

myuser$ ls -la
drwxrwxrwx@ 1 myuser  staff  65536  1 mai 10:53 .
drwxrwxrwx@ 1 myuser  staff  32768 28 aoû  2013 ..
drwxrwxrwx  1 myuser  staff  32768  1 mai 10:36 foo

目录 foo 似乎为空:

myuser$ ls foo/

myuser$ ls -la foo/
ls:  : No such file or directory
total 192
drwxrwxrwx  1 myuser  staff  32768  1 mai 10:36 .
drwxrwxrwx@ 1 myuser  staff  65536  1 mai 10:53 ..

但是“ls: : 没有这样的文件或目录”这一行很奇怪。我想这就是我无法删除这个目录的原因。我们还可以看到,“ls foo”返回一个空行,好像有什么东西,但是什么呢?如何删除它?

谢谢

答案1

我估计foo目录中可能有一个文件的名称中包含不可打印的字符。比较一下你ls输出中使用实际字符ls 输出

cd foo
ls             # you see what your terminal lets you see
ls | od -a     # you see the character codes *really* coming from ls

有多种方法可以帮助删除那些你无法轻易看到或输入名称的文件。在这里你可以使用-irm 的交互选项。

cd foo
rm -i *

明显地,当心用这个。并且只y对你想删除的人说。

至于为什么你第一次rm -rf没有删除它...我想知道你有没有给 rm 起别名?用alias rm看看。你可以使用 暂时运行 rm 的真实版本(绕过别名)\rm -rf foo

答案2

“目录不为空”消息很容易让人误解。通常,rm -rf会以递归方式删除目录中的所有内容,因此目录是否为空并不重要。

在这种情况下,您可能需要检查以下事项:

  • 尝试使用 查看此目录中是否挂载了任何内容df -h,并在必要时卸载
  • 尝试检查是否有应用程序打开文件并运行sudo lsof foo,如有必要,请退出该应用程序
  • 尝试一下sudo rm -rf foo——也许你只是没有权限(虽然我不认为这里是这种情况)
  • 尝试注销并重新登录
  • 尝试重启机器

答案3

命令

 rm -rf dir

不会删除隐藏文件,IE以点开头的,例如.bashrc。 这目录不为空诊断意味着你有一些隐藏文件,你可以使用以下任一方式列出它们

 ls -a

 ls .*

你可以用以下方法递归删除它们

 rm -rf .[a-Z]*

然后你将能够 rmdir 有问题的目录。

编辑:

以下编辑证明了我的观点:

  root@rasal:/tmp# mkdir ttp
  root@rasal:/tmp# cd ttp
  root@rasal:/tmp/ttp# touch .test
  root@rasal:/tmp/ttp# ls -a
  .  ..  .test
  root@rasal:/tmp/ttp# rm -rf *
  root@rasal:/tmp/ttp# ls -a
  .  ..  .test
  root@rasal:/tmp/ttp# 

相关内容