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
rsync
Linux에서 의 사용과 유사합니다 . 여기 더 빠르지 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/q
Cygwin에서는 디스크 사용량이 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 사용).