当我尝试删除一个空目录时,为什么会出现"目录非空"的提示?

我有一个空目录,但是我一直收到以下错误信息:
Cannot remove test: Directory not empty

我知道这个问题已经被问了很多次,但是没有一个能帮到我。
我尝试了ls -la来确保没有隐藏文件,看起来并没有: enter image description here 我还尝试了sudo rmdir testsudo rm -rf test,但是我不知道出了什么问题。
我读到可能是文件系统的问题,但是我不知道该如何解决。

1Try sudo fsck / - ike
5这是一个普通的目录还是一个挂载点?如果是一个挂载点,在删除之前应该先卸载它。如果是一个普通目录,有时可能会有一些打开的句柄导致这个问题。重新启动你的机器并尝试删除它。 - vembutech
@rbrick test 是你的登录用户名吗?echo $USER 的输出是什么?还有 echo $HOME 呢? - αғsнιη
2我很困惑,为什么用户在目录上没有执行权限,但组有呢? - Julian Stirling
2可能是重复的问题:如何在终端中删除非空目录? - Radu Rădeanu
不是一个重复的问题 - 用户已经使用了“-rf”,但没有起作用。 - artm
隐藏文件在那里。 - Josef Klimuk
17个回答

我在一个外部硬盘上遇到了同样的问题,我尝试了很多使用命令行的方法,但每次都失败了。 以下是对我有效的方法:
1. 右键点击文件夹 2. 移动到垃圾箱 3. 清空垃圾箱
是的,这听起来很愚蠢,但对我有效(我不知道为什么和如何,但该该死的文件夹不再存在了)。

2我遇到了同样的问题,你的答案有效。不太确定发生了什么愚蠢的事情,以及为什么"-rf"无法删除一个非空文件夹。 - artm
4刚才发生了什么?为什么它起作用了? - Sahil Arora
发生了什么事?老实说,我不知道。也许是由于某种原因导致文件夹的文件损坏:像“is-empty”这样的标志或者"how-many-file-inside"这样的文件计数器被设置为错误的值。有时候,类似这样的错误可能是由硬盘损坏造成的。为什么这样会起作用呢?我不知道命令是如何实现的(想想C语言),但我猜它们在执行之前会检查这些标志和计数器(我的意思是,如果文件计数器大于0,则显示“错误:目录非空”并中止操作),而直接清空回收站将删除文件夹及其所有文件和子文件夹,没有任何检查机制。 - Marco Ottina
也许,通过命令行删除文件夹需要一些条件,比如文件夹的空置(因为从文件系统中删除文件夹的节点只会删除该单个链接节点,并且要求文件夹为空,这样就不会因为失去与它们的中间链接的关系而在文件系统中“遗忘”其他文件节点,这些节点由文件夹表示)... 而通过右键单击->删除或清空回收站来删除文件夹会递归地删除文件夹和所有文件和子文件夹,而不考虑标志、计数器等等(所以不进行任何检查)。 - Marco Ottina
我重申一遍,我不知道确切的原因,只是猜测而已,因为我不了解文件系统、命令以及整个操作系统的实现和编程。 - Marco Ottina
1在我的情况下,所涉及的子目录恰好位于从我的 Mac 共享到 Linux 虚拟机的文件夹中,我试图从 Linux 虚拟机端删除该文件夹。似乎 Mac 端仍然保留了一些文件夹。从 Mac 端执行 rm -rf 命令成功解决了问题。 - MindJuice
将该目录移动到.Trash中,使其禁止在整个驱动器上执行属性操作。 - Stephen Boston
3这只是将损坏的文件夹从.Trash-1000/files移动到.Trash-1000/expunged,它们仍然无法删除。 - Sebastian Simon
奇怪的是 sudo rm -rf 没有起作用,但这个命令却起了作用。@Sebastian,这个损坏的文件夹并不在 .Trash/expunged 中。 - Rainer Glüge

我安装了Win 10和Ubuntu双系统,并且两个系统共享Windows分区。
最近,在Ubuntu下,我也遇到了无法删除这些分区中的空文件夹的问题。我找不到在Linux下解决它的方法。
然而,当我切换到Windows并运行以下命令后,问题得到了解决:
chkdsk

通过命令提示符运行以针对目标磁盘。检查了一些错误,然后我运行。
chkdsk /F

修复磁盘错误。
完成后,我现在可以删除那些文件夹了。

3这种方法对我有效。我认为还值得注意的是,共享分区是NTFS格式化的,很可能已损坏。 - krismath
幸运的是,我还能使用一个本地的Windows机器。对于其他人来说,ntfsfix(在大多数发行版中都存在)可能会有所帮助。(如果这个方法有效,请给予反馈!) - Frank N

我遇到了同样的问题,无法删除目录,因为它不是空的。
以下操作序列对我有效。
从命令行首先执行以下操作: ``` sudo rmdir --ignore-fail-on-non-empty 要删除的文件夹名称 ```
上述命令帮助Ubuntu忽略非空目录。
然后只需进入文件夹,按下Shift + Del。就这样。

按下Shift+Delete对我来说已经足够了。 - BERA
谢谢,rmdir 命令有效! - gebbissimo

你可以通过输入sudo rm -rf {dir_name}来删除它。该目录可能已被设置为只读权限。希望给出的命令能够成功删除文件夹。

2我无论如何都会收到“目录非空”的错误信息。这看起来很奇怪,所以我录制了屏幕以作证明。 - naXa stands with Ukraine
即使目录中有内容,该命令在答案中也能正常工作,并且适用于子目录。 - Wolverine
1不信就看看 :D https://drive.google.com/open?id=1UEYVa4UT6df7xucrq-lO82xjk3afHHzA - naXa stands with Ukraine
1这种奇怪的行为是由NTFS分区中的错误引起的。通过chkdsk /F命令解决了问题。 - naXa stands with Ukraine

如果目录是使用CIFS(也称为Samba)挂载的文件系统的一部分,并且它包含一个损坏的符号链接文件,则ls命令无法提到该文件。(我在运行14.04.2 LTS的CIFS客户端和运行12.04.5 LTS的服务器上观察到了这个错误。)
因此,该目录不为空,但是(通过CIFS),您无法看到它。该文件只能通过在托管该文件系统的文件服务器上运行的命令来查看,因此只能通过该方式删除。

这就是问题所在!是我还是CIFS只是有点烦人和慢得要命? - kontextify
七年过去了,仍然没有解决方案,这意味着不只是你一个人遇到这个问题! - Camille Goudeseune

如果您正在使用btrfs文件系统,可能会出现一个大小非零的空目录。您可以通过以下方式检查是否是这种情况:
stat -c %s test

一个空的btrfs文件夹的i_size应该为零。在我的情况下,~/.config/chromium/Default的i_size是6160。
建议的解决方案是卸载文件系统,运行btrfs check确认问题并检查其他有问题的目录,最后运行btrfs check --repair修复。不过,这个操作是有风险的,所以最好先备份文件。
来源:Btrfs问题FAQ

图形用户界面解决方案

  1. 将文件夹移动或剪切并粘贴到垃圾文件夹中
  2. 清空垃圾箱

完成。

命令行解决方案

sudo mv folder_error/ .local/share/Trash

你可以使用trash-cli来清空垃圾箱:trash-empty 或者
sudo rm -fr ~/.local/share/Trash/*

3我认为这里的命令行解决方案实际上是一个通用解决方案。将空文件夹移动到另一个位置,一旦移动完成就删除它。例如,像这样mkdir a ; mv test a/ ; rm -rf a/test ; rm -rf a。类似这样的方法对我起作用了(尽管我不知道为什么会起作用),而且我不需要root访问权限。 - Jake Fisher
你的评论应该被接受为答案,哈哈。 - Mattia Rasulo

试试这个命令:
sudo lsof | grep deleted 

检查列表,看看你的目录是否仍在使用中。:D
如果是的话,停止服务,然后你就可以删除该目录了。

显然,如果目录无法被删除,它就不会出现在打开的、已删除的文件描述符列表中。;-] - David Foerster

这个问题出现在那些文件夹或文件没有完全复制的情况下。这是输入/输出错误。我尝试使用Shift+Del删除或通过命令删除,但这些方法都不起作用。我尝试右键点击并选择“移动到垃圾桶”,这样可以解决。


我在Ubuntu 16.04上遇到了同样的问题,通过以下步骤解决:

  1. 清空垃圾箱
  2. 重新启动

打开和关闭文件管理器没有用,只有重新启动才有效。