尝试删除空目录时,为什么会出现“目录不为空”的提示?


37

我有这个空目录,但是我不断收到以下错误消息:

Cannot remove test: Directory not empty

我知道这个问题已经被问了很多遍了,但是没有一个人提供帮助。

我试图ls -la确保没有隐藏文件,并且似乎没有: 在此处输入图片说明

我尝试sudo rmdir test了以及sudo rm -rf test,但我只是不知道怎么了。

我读到文件系统可能有问题,但是我不知道如何解决该问题。


试试sudo fsck /
ike 2014年

2
是普通目录还是挂载点。如果这是一个安装点,则应在删除之前将其卸载。如果它是普通目录,则有时可能会有一些打开的句柄导致此问题。重新启动计算机一次,然后尝试将其删除。
vembutech

@rbrick test您的登录用户名是吗?输出是echo $USER什么?什么echo $HOME呢?
αғsнιη

1
我很困惑,为什么用户没有目录的执行权限,但组却具有?
朱利安·斯特林

Answers:


36

我在外部硬盘上遇到了同样的问题,我使用命令行尝试了很多方法,但是每次都失败。那对我有用:

  1. 右键点击文件夹
  2. 移到废纸篓
  3. 清空垃圾桶

是的,它很傻,但是对我有用(我真的不知道如何和为什么,但是该死的文件夹不再存在)


我遇到了同样的问题,并且您的答案有效。不太确定发生了什么愚蠢的事情,以及为什么“ -rf”未能删除非空文件夹。
artm

3
刚刚发生什么事了?为什么行得通?
Sahil Arora

发生了什么?老实说,我不知道。也许是由于某些原因损坏了文件夹的文件:诸如“ is-empty”的标记或诸如“ how-many-file-inside”的文件计数器已被设置为错误的值。有时,诸如此类的错误可能是由于硬盘损坏引起的。为什么行得通?我不知道命令的实现方式(想想C),但我猜想它们在执行操作之前会检查这些标志和计数器(我的意思是,如果文件计数器> 0,则“错误:目录不为空”并中止),同时清空垃圾桶无需任何检查即可直接删除该文件夹及其所有文件和子文件夹。
马可·奥蒂娜

也许,通过命令行删除文件夹需要某些条件,例如文件夹的空白,(因为从文件系统中删除文件夹的节点仅会删除单个linknode,并且要求文件夹为空,因此不会“忘记其他文件节点” ”(由于丢失了中间文件的链接,由文件夹表示),因此通过文件系统)。然后通过右键单击->删除或清空垃圾箱来删除文件夹,将以递归方式删除该文件夹以及所有文件和子文件夹,而不用担心标记,柜台之类的东西(因此,不执行检查)
Marco Ottina

1
就我而言,该子目录恰好位于从我的Mac与Linux VM共享的文件夹中,而我试图从Linux VM端删除该文件夹。似乎Mac方面正在保留一些文件夹。在做rm -rf从Mac边工作。
MindJuice

5

我已经安装了Win 10 + ubuntu双系统。并且这两个系统共享Windows分区。

最近,我还遇到了无法删除ubuntu下这些分区中的空文件夹的问题。我找不到在Linux下解决该问题的解决方案。

但是,在我切换到Windows并运行之后

chkdsk

通过cmd目标磁盘。检出了一些错误。然后我跑

chkdsk /F

修复磁盘错误。

完成后,我现在可以删除这些文件夹。


2
这种方法对我有用。我认为还需要注意的是,共享分区是NTFS格式的,并且它可能已损坏。
krismath

4

您可以通过键入将其删除sudo rm -rf {dir_name}。该目录可能已设置为只读权限。我希望给定的命令可以删除该文件夹。


Directory not empty反正我知道 似乎很奇怪,所以我记录了我的屏幕进行证明。
naXa

即使目录中包含内容以及子目录,答案中的命令也可以使用。
金刚狼


这种奇怪的行为是由NTFS分区中的错误引起的。用...解决chkdsk /F
naXa

4

我有同样的问题,因为它不是空的,所以无法删除目录。

此操作顺序对我有用。

  1. 首先从命令行

    sudo rmdir  --ignore-fail-on-non-empty folder-name-to-be-deleted
    

上面的命令帮助ubuntu忽略目录不为空。

  1. 然后只需转到文件夹,然后按Shift + Del键即可。

3

GUI解决方案

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

完成了。

命令行解决方案

sudo mv folder_error/ .local/share/Trash

您可以使用trash-cli清除:垃圾桶为空或

sudo rm -fr ~/.local/share/Trash/*

1
我认为这里的命令行解决方案实际上是一个通用的解决方案。将空文件夹移动到另一个位置,并在移动后将其删除。例如,类似这样的东西mkdir a ; mv test a/ ; rm -rf a/test ; rm -rf a。这样的方法对我有用(尽管我不知道为什么会这样),而且我不需要root访问权限。
杰克·费舍尔

2

如果该目录是通过CIFS(又名samba)挂载的文件系统的一部分,并且包含的​​文件是符号链接断开的文件,则ls无法提及该文件。(我在运行14.04.2 LTS的CIFS客户端和运行12.04.5 LTS的服务器上观察到此错误。)

因此目录不是空的,但是(通过CIFS)您无法看到该目录。只有在托管该文件系统的文件服务器上运行的命令才能看到该文件,因此只能删除该文件。


2

如果使用btrfs,则它可能是一个空目录,且i_size不为零。您可以通过以下方式检查是否是这种情况:

stat -c %s test

btrfs中空文件夹的i_size应该为零。就我而言,我得到了6160 ~/.config/chromium/Default

建议的解决方案是卸载文件系统,运行btrfs check以确认问题并检查其他有问题的目录,最后运行btrfs check --repair以进行修复。但是,此操作有风险,因此最好先备份文件。

来源:Btrfs问题常见问题解答


1

我在Ubuntu 16.04上遇到了相同的问题,并通过以下方法解决了该问题:

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

打开和关闭文件管理器没有任何好处,只有重新启动才能起作用。


0

试试这个命令:

sudo lsof | grep deleted 

检查列表中是否仍在使用目录。:D

如果是这样,请停止该服务,您将能够删除该目录。


显然,如果无法删除,该目录将不会显示在已删除的打开文件描述符列表中。;-]
David Foerster's

0

当这些文件夹或文件未完全复制时,会出现此问题。这是输入/输出错误。我尝试使用Shift+ Del或通过命令删除,但这些命令无效。我尝试右键单击并单击“移至垃圾箱”,但它确实起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.