Windows 2003 파일 서버 중 하나에서 누군가 또는 다른 사용자가 일부 사용자의 홈 폴더 내에 무한 반복 디렉토리 트리를 생성하여 삭제할 수 없습니다.
당신은 이런 식으로 바람을 피 웁니다 :
D:\Student\2012\user.name\servername\student\2012\user.name\servername\student\2012\...
그리고 내가 말할 수있는 한 무한히 계속됩니다.
시스템에있는 시스템에서 디렉토리 트리를 삭제하려고하면 “파일 또는 폴더 삭제 오류 : 파일을 삭제할 수 없습니다 :”가 발생합니다. 네트워크 공유에 연결된 Windows 7 시스템에서 삭제하려고하면 “폴더 사용 중”오류가 발생합니다.
디렉토리 트리를 아래로 탐색하면 결국 열거 나 삭제할 수없는 디렉토리에 도달하지만 (오른쪽 클릭하면 표준 옵션이 나타나지 않는 경우) 다른 시스템의 공유에서 동일한 디렉토리를 열려고하면 열 수는 있지만 Windows 탐색기는 매우 느려집니다.
이 게시물 의 제안을 시도하고 Linux 디스크로 서버를 부팅하고 디렉토리를 rm -rf하려고 시도했지만 작동하지 않았습니다.
미스터리입니다.
편집 : 디렉토리를 제거하지 않고 디렉토리 이름을 바꿀 수 있다고 덧붙일 수도 있습니다.
답변
또한 Java IDE에 의해 생성 된 끝없는 재귀 폴더가 있었고 Windows 탐색기 또는 cmd 프롬프트에서 삭제할 수 없었습니다.
그러나 git을 설치할 때 git-bash도 설치했습니다. git-bash에서 다음 명령을 실행할 수 있습니다.
rm -rfd recursive_folder_name
그것을 처리 할 것입니다.
답변
어딘가에 폴더에 대한 심볼릭 링크가있을 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
따라서 재귀를 제거하십시오.
답변
해당 폴더에서 작업하는 사람이에서 user.name
로 루프백하는 연결 지점을 servername
만들어서 ‘무한 루프’디렉토리 트리를 만들 수 있습니다.
정션은 NTFS 파일 시스템의 기능으로 디렉토리의 별명으로 작동하는 디렉토리에 대한 기호 링크를 작성할 수 있습니다.
http://en.wikipedia.org/wiki/NTFS_junction_point
위키 페이지의 “관측 효과”섹션에서 설명하는 문제를 볼 수 있습니다.
해당 서버의 정션을 나열하려면이 유틸리티를 실행하십시오.
http://technet.microsoft.com/en-us/sysinternals/bb896768
또한 접합점을 삭제할 수있는 기능을 제공해야합니다.
답변
이클립스가 삭제할 수없는 거대한 폴더 트리를 만들 때 비슷한 문제가 발생했습니다. 그러나 폴더를 이동하고 이름을 바꿀 수 있었기 때문에 배치 파일을 작성하여 한 번에 하나씩 폴더를 삭제하면 트리가 다운되었습니다. C 디렉토리에있는 FOLDERNAME 의 명백히 깊은 폴더 트리의 경우
C:/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/*FOLDERNAME*/...
배치 파일 :
:LoopStart
REN "C:/*FOLDERNAME*" "*TEMPFOLDERNAME*"
MOVE "C:/*TEMPFOLDERNAME*/*FOLDERNAME*" "C:/"
RMDIR /S /Q "C:/*TEMPFOLDERNAME*"
GOTO LoopStart
:LoopEnd
TEMPFOLDERNAME은 이제 유한 길이의 트리 (아무것도 포함하지 않은 단일 폴더)이고 거대한 FOLDERNAME 트리에는 루프가 실행될 때마다 하나의 폴더가 없어서 맨 위에있는 폴더를 제거하여 맨 아래에 도달하기 때문에 작동합니다.
답변
일부 Java 응용 프로그램에서 수행 한 5000 + 디렉토리 깊이의 폴더 엉망과 같은 문제가 발생하여 다음과 같이 썼습니다.
https://gitlab.imanolbarba.net/imanol/DiREKT
그것은 잠시 후에 모든 것을 제거했지만 일을 처리했습니다. 나는 그것이 같은 좌절감을 느끼는 사람들에게 도움이되기를 바랍니다.
답변
이 스크립트를 사용하여 끝없는 반복 디렉토리를 해결했습니다.
:LoopStart
takeown /F "c:\temp\Application Data"
Attrib -S -H "c:\temp\Application Data"
REN "C:\temp\Application Data" "5"
takeown /F "c:\temp\5\Application Data"
Attrib -S -H "c:\temp\5\Application Data"
MOVE "c:\temp\5\Application Data" "C:\temp"
Del /F /S /Q c:\temp\5\*.*
RMDIR /S /Q "C:\temp\5"
GOTO LoopStart
:LoopEnd
답변
나는 같은 문제가 있었다. 삭제하려는 폴더에 같은 이름의 링크 트리가 끝없이 포함되어 있으며 삭제하려고 할 때마다 “파일이 너무 깁니다 …”오류가 발생했습니다. 위의 모든 방법을 포함하여 시도한 명령에 상관없이 해당 폴더 바로 위의 cmd 창에서 Cygwin의 “rm”명령을 시도했습니다. “rm -r -f [folder]”를 입력했는데 불만없이 폴더가 삭제되었습니다.
Cygwin은 https://cygwin.com/install.html 에서 무료로 다운로드 할 수 있습니다 . 기본적으로 모든 일반적인 명령 (예 : ls, rm, du 및 cat)이 포함 된 Windows 용 UNIX 쉘이지만, 모두 다운로드 한 경우 약 1GB의 공간을 차지하는 수많은 패키지가 있습니다. 기본 다운로드 패키지에는 UNIX 명령이 포함되어 있다고 생각합니다. 그렇지 않은 경우 메모리가 제공되는 경우 “utils”번들에 있습니다.
참고 : Cygwin 명령은 기본 bash 쉘 창에서 실행할 필요가 없습니다. cygwin의 “bin”디렉토리에 대한 경로를 시스템 PATH 환경 변수에 추가하여 cmd 창에서 실행할 수 있습니다. 제 경우에는 “C : \ cygwin64 \ bin”을 추가했습니다.
이게 도움이 되길 바란다.