在终端中我尝试删除一个目录但是不起作用:
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
有多种方法可以帮助删除那些你无法轻易看到或输入名称的文件。在这里你可以使用-i
rm 的交互选项。
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#