我尝试使用“rm -rf”删除目录并收到消息“目录不为空”:
Bens-MacBook-Pro:please benjaminhocking$ ls -lart empty_directory/
total 16
drwxr-xr-x 5 benjaminhocking staff 170 Aug 27 14:46 .
drwxr-xr-x 3 benjaminhocking staff 102 Aug 27 15:28 ..
Bens-MacBook-Pro:please benjaminhocking$ rm -rf empty_directory/
rm: empty_directory/: Directory not empty
Bens-MacBook-Pro:please benjaminhocking$ rmdir empty_directory/
rmdir: empty_directory/: Directory not empty
如果我使用 Finder 尝试执行相同操作(将文件夹拖到废纸篓),我会收到以下消息
由于项目“empty_directory”正在使用中,因此无法完成该操作。
我曾经尝试过这样做xattr -d com.apple.quarantine
,纯粹是出于迷信,但没有任何效果。
一个可能很重要的背景信息是,这个目录最初位于一个目录中,这个目录应该被我在 Terminal 锁定之前发出的“make clean”命令删除,之后我运行的其他一半以上的程序也被锁定,包括 Skype,最后是操作系统本身。最后我不得不按住电源键重新启动电脑。
编辑以添加:我遗漏的另一个重要信息是,这发生在加密文件夹中encfs
。我能够在加密端找到相应的文件夹并将其删除。我仍然不知道为什么我不能像平常一样从解密端执行此操作。我暂时不回答这个问题,以防有人对此有好的答案。
答案1
重新启动计算机并rmdir(1)
再次运行。
$ rmdir -r empty_directory/
如果这不起作用,请尝试:
$ rm -rf empty_directory/
如果仍然不起作用,假设 OS X 已lsof(8)
预安装,则输入:
$ lsof +D empty_directory/
这应该会告诉您此目录中是否有任何文件正在被任何程序使用。我认为 HFS+ 文件系统不允许删除正在使用的文件。无论如何,killall(1)
任何可能使用此目录或其中任何隐藏文件的可执行文件。Finder 很可能正在使用目录中的隐藏文件empty_directory
来存储文件夹视图设置。希望这能有所帮助。
PS:要确定是否lsof(8)
已安装,请输入:
$ lsof
如果输出如下所示,lsof(8)
则已安装在您的系统上。
lsof: /usr/bin/lsof /usr/bin/X11/lsof /usr/share/man/man8/lsof.8.gz
检查该目录中是否有任何隐藏和加密的文件或加密密钥文件。这些可能是罪魁祸首。
答案2
使用“磁盘工具”修复磁盘为我解决了这个问题。
答案3
对我有用的唯一解决方案是https://unix.stackexchange.com/questions/234876/unable-to-delete-a-file-whatever-i-do:
将它们移动到 /tmp 并重新启动。
我尝试过的其他选项是:
- 磁盘实用程序 - 急救。
lsof +D bad_file
没有显示输出。- sudo rm-rf
- 启动进入单用户终端和
rm -rf
。
答案4
我在尝试删除目录 (rm -r dirname) 时遇到了这个错误。在搜索并找到此主题之前,我已经尝试了我在此处阅读的所有建议。我不知道原始问题中是否有其他无意中未说明的要点,但就我而言,问题的根源和解决方案是:
有问题的目录位于网络安装磁盘上
ls
从 Finder 或命令行进行的任何尝试均未显示任何内容,.
但..
我通过命令登录网盘服务器
ssh
,查看了ls -al
一下,结果显示除了 和.
之外..
,还有几个.__filename
带有扩展安全信息(即+
附加在模式中)的项目。
我相信这些是或类似于我多年前在使用cp -R
、tar
或cpio
存档或移动文件组时第一次注意到的 Mac OSX 创建的文件。我当时推断它们是用来在移动后正确重置某些文件属性的 - 可能是 uid/gid、mode、acls、mtime/utime/ctime 等;我不太确定 - 属性不是在此之前已经通过这些命令正确重置(我记得在使用通常形式的、等时这些类型的文件开始出现之前,OSX 曾经包含mvmac
和cpmac
命令来解决这个问题)。.__filename
cp
tar
当这些文件被写入内部、USB 或 Firewire 驱动器时,我从未遇到过删除这些文件的麻烦;这是我第一次在网络磁盘上发现它们;从安装的客户端完全无法检测到,但从服务器端查看时各方面都正常。
rm -rf dirname
从网络磁盘服务器上的登录正确删除了目录及其内容。
因此,还有另一个答案;如果它与网络磁盘一起出现在任何人面前,那么这可能是解决此问题的另一种潜在解决方案。