![如何删除无限循环的目录树?](https://linux22.com/image/1312522/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E6%97%A0%E9%99%90%E5%BE%AA%E7%8E%AF%E7%9A%84%E7%9B%AE%E5%BD%95%E6%A0%91%EF%BC%9F.png)
在我们的一台 Windows 2003 文件服务器上,某人或某物以某种方式设法在某些用户的主文件夹中创建无限循环的目录树,并且无法删除它们。
你会得到类似这样的结果:
D:\Student\2012\user.name\servername\student\2012\user.name\servername\student\2012\...
据我所知,它将无限地持续下去。
尝试从其所在的系统中删除目录树会导致“删除文件或文件夹时出错:无法删除文件:”。尝试从连接到网络共享的 Windows 7 系统中删除它会导致“文件夹正在使用”错误。
如果您沿着目录树向下导航,最终您会到达一个无法打开或删除的目录(如果右键单击,则不会出现任何标准选项),但是如果您尝试从另一个系统上的共享打开同一个目录,则可以打开它,但是 Windows 资源管理器会变得非常慢。
我已经尝试过这发布,以及使用 Linux 光盘启动服务器并尝试 rm -rf 目录,但都没有起作用。
这是一个谜。
编辑:我还要补充一点,可以重命名目录,但不能删除它们。
答案1
我还有一个由 java IDE 创建的无限递归文件夹,我无法在 Windows 资源管理器或 cmd 提示符下将其删除。
但是,我在安装 git 时也安装了 git-bash。在 git-bash 中,你可以发出以下命令:
rm -rfd recursive_folder_name
它会处理好这件事。
答案2
某个地方可能存在指向文件夹的符号链接,很可能是student
路径中的第二个文件夹。
尝试执行命令:
dir D:\Student\2012\user.name\servername
并查看是否student
标记为 DIR 或 SYMLINK/JUNCTION。
例如,这是该dir
命令的典型输出:
04/24/2012 10:58 PM <DIR> .
04/24/2012 10:58 PM <DIR> ..
04/24/2012 10:58 PM <SYMLINKD> a [h:\a]
您会看到前两个条目标记为DIR
,而第三个条目(指向另一个文件夹的符号链接)标记为SYMLINKD
。 在您的例子中(Windows 2003),我认为JUNCTION
s 而不是SYMLINK
s。
如果该student
文件夹是符号链接或连接点,请运行以下命令:
cd /d D:\Student\2012\user.name\servername
rmdir student
从而摆脱了递归。
答案3
在该文件夹中工作的任何人都有可能创建一个从 到 循环回的连接点user.name
,servername
从而创建“无限循环”目录树。
连接是 NTFS 文件系统的一项功能,可让您创建指向目录的符号链接,该符号链接可作为目录的别名。 http://en.wikipedia.org/wiki/NTFS_junction_point
您可以在 wiki 页面的“观察到的效果”部分下看到您描述的问题。
尝试运行此实用程序来列出该服务器下的连接点:
http://technet.microsoft.com/en-us/sysinternals/bb896768
它还应该使您能够删除连接点。
答案4
我也遇到了同样的问题。我想删除的文件夹包含一个指向相同名称的无尽链接树,每次尝试删除它都会导致 Windows 抛出“文件太长...”错误。无论我尝试什么命令,它都会失败包括上述所有方法所以我在有问题的文件夹上方的 cmd 窗口中尝试了 Cygwin 的“rm”命令。我输入了“rm -r -f [folder]”,文件夹被毫无怨言地删除了。
您可以从以下位置免费下载 Cygwinhttps://cygwin.com/install.html。它基本上是 Windows 的 UNIX shell,包含所有常用命令(例如 ls、rm、du 和 cat),但也包含大量软件包,如果全部下载,将占用大约 1GB 的空间。我相信默认下载包包含 UNIX 命令。如果没有,如果我没记错的话,它们在“utils”包中。
注意:您不需要在其原生 bash shell 窗口中运行 Cygwin 命令。只需将 cygwin 的“bin”目录的路径添加到系统 PATH 环境变量中,即可在 cmd 窗口中运行它们。在我的情况下,我添加了“C:\cygwin64\bin”。
我希望这有帮助。