我有一个由应用程序错误生成的目录,该目录的结构涉及 2000 多个目录,一个目录一个另一个目录,类似于:
目录aaaa
inside bob
inside ccc
inside ddd
insideeee
等。这些目录的深度为 1000 级,其中许多目录的名称中的空格均经过 URL 编码(空格是%20
和>
是%3E
等)。
如果我尝试使用删除该目录,rm -fr
我会收到消息directory is not empty
.我认为删除目录所需的字符串对于 UNIX 来说太长了。有没有办法删除这个目录rm
?
我使用的是 Mac OS X Mountain Lion。
答案1
如果您使用rm -rf stuff_to_delete
非常深的结构,那么 rm 可能无法处理太多目录。
您可以通过以下方法解决此问题:
find /starting/path/to/delete/from -type d -delete
或与
find -type d /starting/path/to/delete/from -exec rm -f {} \;
第一个应该可以工作。第二个命令为每个目录启动一个新命令 (rm),但这允许您使用 的rm
强制标志。但我认为不需要它,并且我希望第一个命令更快。
无论使用什么命令,请首先尝试使用 -print 以确保您的路径正确。
答案2
我经常在我的 MacOSX 10.8 笔记本电脑上观察到“sudo rm -fr”失败的情况。在最新的案例中,我要删除的目录在目录层次结构中包含约 28,000 个文件,最多可能有 8 或 10 层深;磁盘上的总大小约为 4 GB。只需第二次运行“sudo rm -fr”即可删除剩余的文件,就像我一直那样。
在我看来,问题并不在于目录层次结构的深度,因为未删除的文件似乎总是位于目录树的顶部附近。很难相信它与文件或目录的总数有任何关系,因为我希望“rm”递归地删除这些目录。