Windows 2008 서버의 특정 하위 디렉토리에 ~ 3 백만 개의 파일이 들어있는 디렉토리가 있습니다. 루트 디렉토리에서 SHIFT + DEL을 통해 파일을 수동으로 삭제하려면 시간이 걸립니다. 더 빠른 방법으로 삭제를 수행하는 다른 방법이 있습니까?
Windows 2008 서버의 특정 하위 디렉토리에 ~ 3 백만 개의 파일이 들어있는 디렉토리가 있습니다. 루트 디렉토리에서 SHIFT + DEL을 통해 파일을 수동으로 삭제하려면 시간이 걸립니다. 더 빠른 방법으로 삭제를 수행하는 다른 방법이 있습니까?
답변:
경고 : 디렉토리에 대한 심볼릭 링크가 있으면 심볼릭 링크가 del아닌 실제 디렉토리가 삭제됩니다. 대상 디렉토리 내부에 심볼릭 링크가없는 경우가 아니라면이 점에 매우주의하여 명령을 실행하지 마십시오.
WinXP 암호화 드라이브에서 일반적으로 45,000 개의 폴더에 약 22GB의 500,000 개 파일을 삭제해야합니다.
Windows 탐색기를 사용하여 삭제하면 파일을 열거하는 데 많은 시간이 걸리기 때문에 쓰레기가됩니다. 일반적으로 삭제해야 할 항목을 C : \ stufftodelete로 이동하고 deletestuff.bat 배치 파일이 rmdir /s/q C:\stufftodelete있습니다. 이것은 밤에 실행되도록 예정되어 있지만 때로는 낮에 실행해야할수록 빠를수록 좋습니다.
다음은 303 개 폴더에있는 960 개 파일의 작은 5.85MB 샘플에 대한 빠른 시간 테스트 결과입니다. 방법 1과 방법 2를 차례로 실행 한 다음 테스트 디렉토리를 재설정합니다.
방법 1은 파일과 디렉토리 구조를 한 번에 제거합니다.
rmdir /s/q foldername
방법 2에는 모든 단일 파일에 대해 화면에 쓰는 오버 헤드를 피하기 위해 파일과 출력을 삭제하는 첫 번째 단계가 있습니다. 두 번째 단계는 나머지 디렉토리 구조를 정리합니다.
del /f/s/q foldername > nul
rmdir /s/q foldername
다음은 3,243 개의 폴더에 404MB의 19,521 개 파일을 사용한 다른 테스트 결과입니다.
따라서 단일 테스트로 판단하기에는 너무 가깝지 않습니다.
편집 : 훨씬 더 많은 데이터로 다시 테스트 한 결과 이것은 일반적인 경우입니다. 146,918 폴더의 1,159,211 파일 28.3GB :
와우, 방법 2는 방법 1보다 거의 3 배 빠릅니다! deletestuff.bat를 업데이트하겠습니다!
del아닌 실제 디렉토리가 삭제됩니다. 대상 디렉토리 내부에 심볼릭 링크가없는 경우가 아니라면이 점에 매우주의하여 명령을 실행하지 마십시오.
큰 디렉토리 트리를 정기적으로 삭제해야하는 경우 해당 디렉토리 트리의 루트를 별도의 파티션에 저장 한 다음 모든 항목을 삭제해야 할 때마다 신속하게 포맷하십시오. 이를 자동화해야하는 경우 다음 DOS 명령을 사용할 수 있습니다.
echo Y | format Z: /FS:NTFS /X /Q
여기서 Z :는 '휘발성'파티션입니다. 참고 : 파티션에는 레이블이 없어야합니다. 나는 이것에 대해 블로그 여기 .
명령 프롬프트에서 (시작-> 실행-> cmd) :
del /f /s /q foldername
자체 API를 사용하여 파일을 매우 빠르게 복사 / 이동하는 것 외에도 TeraCopy는 파일을 삭제할 수 있으며 매우 빠릅니다. TeraCopy를 찾은 이후로 컴퓨터를 설치하지 않은 상태에서는 컴퓨터를 사용하지 않습니다 (복사 / 이동 / 삭제하려는 경우).
동일한 설치 프로그램이 x64 버전을 설치하지만이를 사용하려면 수동으로 강제 실행해야합니다.
안정적인 버전보다 권장되는 베타 버전 : http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/
나는 같은 일을하는 박쥐 파일을했다.
@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T
두 단계로 작업을 수행합니다. 하나는 파일을 삭제하려고합니다. 두 번째는 파일의 소유권을 얻는 것입니다. y 는 지역에 따라 변경되어야합니다 (영어로 예). 작업이 실패하면 (예 : 권한으로 인해 실패한 경우) 다시 실행해야합니다. 그러나 두 번째 라운드는 첫 번째 라운드에서 삭제 된 파일을 삭제하지 않으므로 매우 빠릅니다.
사용 방법. 경로 경로 (예 : c : \ windows)에 delfolder.bat로 저장 한 다음 다음과 같이 실행하십시오.
delfolder "foldername"
여기서 foldername은 폴더의 이름입니다.
내 테스트에서 123'000 파일을 삭제하는 데 3 분이 걸렸습니다 (sata 7200rpm). 예!
%1스크립트에서는 사용하지 말고 "%~1". 이런 식으로 인수가 따옴표와 함께 전달 된 경우에는 인용이 해제되고 다시 인용됩니다. 따옴표와 함께 전달되지 않은 경우 따옴표로 묶습니다.
아래 코드를 사용하면 일반적으로 잘 작동합니다.
mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
rsyncLinux에서 의 사용과 유사합니다 . 여기 더 빠르지 rmdir않나요?
del /f/q/s+와 매우 다릅니다 rmdir /s/q. dir_to_wipe에 정크가 c:\some_important_dir있으면 데이터가 손실됩니다.
Cygwin을 설치 하고 rm -r을 사용하십시오 . 그러나 그것은 과잉 일 것입니다.
rd /q /s...
rm실제로 cmd.exe 내장만큼 빠릅 rd니까? posix 인터페이스의 cygwin 에뮬레이션은 약간의 추가 작업이 필요하므로 다소 느리기 때문에 rm실제로는 감사하지 않습니다.
rm -rf. del /f/s/qCygwin에서는 디스크 사용량이 50 %에 불과했기 때문에 약 10 분 동안 중단 되었습니다. 아래 del에서 디스크 사용량이 100 %로 고정됩니다. 따라서 더 빨리 삭제해야한다고 생각합니다. 두 가지 방법 모두 CPU 사용량이 <1 %입니다. 10 분 동안 계산 한 후 Windows 파일 삭제기를 닫았 기 때문에 파일 번호를 잘 모르겠습니다.
이 두 앱 중 하나를 사용해 보셨습니까?
가장 빠른 성능을 원하면 덮어 쓰기 수를 0으로 설정하십시오. 옵션을 클릭 한 다음 대화 상자의 맨 아래에있는 값을 변경하여이를 수행하십시오.
소스 필드에 삭제할 경로를 입력 한 후 삭제를 클릭하십시오.
이러한 앱은 파일을 휴지통에 넣지 않습니다. 주의해서 사용하십시오.
이것은 이전에 언급 된 답변에서 취한 단계를 칭찬하고 보강하기 위해 제공됩니다.
위의 두 가지 방법은 매우 효과적이지만 성능을 결정하는 것은 동일한 조건에 대해 벤치마킹하지 않는 한 어려울 것입니다.
그런 다음 배치 파일을 통해 구성을 실행하고 Powershell Cmdlet을 사용하여 성능을 기록하고 측정하십시오.
다음은 내가 실험했지만 결정적인 성능 / 결과를 얻을 수없는 샘플 폴더 (총 크기로 명명 됨)입니다.
r.bat
rmdir /s/q 3.2G
rd.bat
del /f/s/q 3.3G > nul rmdir /s/q 3.3G
파워 쉘 :
PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt
PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt
PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt
PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
Hugo 의 답변 이 가장 빠르지 만 첫 번째 패스에서 숨겨진 파일이나 시스템 파일을 제거하지는 않으므로보다 완벽한 솔루션을 원하면 / a 매개 변수를 사용하십시오.
del /f /s /q /a foldername > nul
rmdir /s /q foldername
Magallanes 의 BAT 파일에 대해서는 takeown 및 icacls에 매우주의하여 하드 링크가 동일한 권한 및 소유자를 공유하므로 제거하려는 폴더에 불포화 하드 링크 가있는 경우 takeown 및 icacls를 사용하면 외부 파일의 권한 및 소유자가 변경됩니다. 폴더.
ln.exe 도구를 사용하면 폴더 내부에 하드 링크 된 모든 파일을 나열하고 폴더 외부에있는 파일 (불포화 하드 링크)에 하드 링크 된 파일인지 확인할 수 있습니다.
ln.exe --enum foldername > HardlinksList.txt
폴더를 삭제하면 여러 파일을 삭제하는 것보다 빠릅니다.
따라서 명령 프롬프트 대신 마우스를 사용하려면 디렉토리를 만들고 파일을 이동 한 다음 삭제할 수 있습니다 (Shift + Del 사용).