Windows에서 파일 대량 삭제


141

Windows 2008 서버의 특정 하위 디렉토리에 ~ 3 백만 개의 파일이 들어있는 디렉토리가 있습니다. 루트 디렉토리에서 SHIFT + DEL을 통해 파일을 수동으로 삭제하려면 시간이 걸립니다. 더 빠른 방법으로 삭제를 수행하는 다른 방법이 있습니까?


1
또한 Stack Overflow에서 질문했습니다 : stackoverflow.com/questions/186737/…
Hugo

6
자석을 일부 하위 디렉토리에만 타겟팅하려면 어떻게해야합니까?
Jaime Hablutzel

7
@Jaime 실제 프로그래머처럼 꾸준한 손으로 ... ;-) xkcd.com/378
Legionair

SSD 드라이브 인 경우 어떻게합니까?
Benjamin Weiss

답변:


179

경고 : 디렉토리에 대한 심볼릭 링크가 있으면 심볼릭 링크가 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
  • 방법 1 : 17.5 , 14.9 , 13.9 , 14.8 , 13.8 : 평균 14.98 초
  • 방법 2 : 14.3 , 12.1 , 11.7 , 14.2 , 11.8 : 평균 12.82 초

다음은 3,243 개의 폴더에 404MB의 19,521 개 파일을 사용한 다른 테스트 결과입니다.

  • 방법 1 : 2 분 20 초
  • 방법 2 : 2 분 33 초

따라서 단일 테스트로 판단하기에는 너무 가깝지 않습니다.


편집 : 훨씬 더 많은 데이터로 다시 테스트 한 결과 이것은 일반적인 경우입니다. 146,918 폴더의 1,159,211 파일 28.3GB :

  • 방법 1 : 2 시간 15 분, 2 시간 34 : 평균 : 2 시간 25 분
  • 방법 2 : 49m, 57m : 평균 : 53 분

와우, 방법 2는 방법 1보다 거의 3 배 빠릅니다! deletestuff.bat를 업데이트하겠습니다!


RD / S / Q는 절대 경로를 지정하면 효과적이지만 상대 경로로 작업 할 때는 효과가 없습니다. 해결책이 있습니까?
Michael S.

1
@Hugo : Hugo, 질문 : 위의 시간이 지정된 테스트에서 두 가지 방법 중 하나 또는 두 가지 방법 모두에서 메소드를 실행하기 직전에 파일을 세었습니까? 폴더 내용이 이미 OS 파일 캐시에있을 수 있기 때문에 묻습니다. 감사!
William C

@ WilliamC : 정확하게 기억하지는 않지만 동일한 내용으로 반복 삭제하는 경우 한 번의 삭제 직전에 계산하고 다른 삭제에 대해서는 반복하지 않습니다 (이미 숫자를 알고 있음).
Hugo

1
256 자보다 긴 경로 이름이 있으면 rmdir과 del이 모두 실패합니다.
Nicolai Ehemann

1
경고 : 디렉토리에 대한 심볼릭 링크가 있으면 심볼릭 링크가 del아닌 실제 디렉토리가 삭제됩니다. 대상 디렉토리 내부에 심볼릭 링크가없는 경우가 아니라면이 점에 매우주의하여 명령을 실행하지 마십시오.
user0103

18

큰 디렉토리 트리를 정기적으로 삭제해야하는 경우 해당 디렉토리 트리의 루트를 별도의 파티션에 저장 한 다음 모든 항목을 삭제해야 할 때마다 신속하게 포맷하십시오. 이를 자동화해야하는 경우 다음 DOS 명령을 사용할 수 있습니다.

echo Y | format Z: /FS:NTFS /X /Q

여기서 Z :는 '휘발성'파티션입니다. 참고 : 파티션에는 레이블이 없어야합니다. 나는 이것에 대해 블로그 여기 .


정확한 디렉토리 경로가 필요한 경우 하드 링크를 사용하여 파일이 저장된 디스크와 디렉토리간에 연결을 만듭니다.
Nime Cloud

1
@NimeCloud : 하드 링크는 파일 시스템을 교차하거나 디렉토리를 링크 할 수 없습니다.
grawity

5
그러나 기호 링크 파일 시스템과 링크 디렉토리를 교차 할 수 있으므로 여기에 적합 할 수 있습니다. mklink 명령 (Vista 이상; 그렇지 않으면 Mark Russinovich / SysInternals의 정션 사용)을 참조하십시오.
Robert Calhoun

9

명령 프롬프트에서 (시작-> 실행-> cmd) :

del /f /s /q foldername 

이것은 삭제하는 내용을 나열하기 때문에 훌륭하지만 속도면에서 rd와 동일합니다.
bobobobo

1
오 와우 와우 생각만큼 좋지 않습니다. 파일을 빠르게 삭제하지만 디렉토리 트리는 그대로 둡니다.
bobobobo

1
rd를 사용하여 지우려면 시간이 오래 걸립니다.
bobobobo

3
@bobobobo ~ 30GB / 1,000,000 개 파일 / 15,000 개 폴더로 일부 테스트를 수행했으며 del + rd는 rd보다 거의 3 배 빠릅니다.
Hugo

1
경로 이름이 256자를 초과하면 실패합니다.
Nicolai Ehemann

7

자체 API를 사용하여 파일을 매우 빠르게 복사 / 이동하는 것 외에도 TeraCopy는 파일을 삭제할 수 있으며 매우 빠릅니다. TeraCopy를 찾은 이후로 컴퓨터를 설치하지 않은 상태에서는 컴퓨터를 사용하지 않습니다 (복사 / 이동 / 삭제하려는 경우).

동일한 설치 프로그램이 x64 버전을 설치하지만이를 사용하려면 수동으로 강제 실행해야합니다.

안정적인 버전보다 권장되는 베타 버전 : http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


TeraCopy와 rmdir 또는 del 또는 del + rmdir을 비교해 본 적이 있습니까?
Hugo

1
@ Hugo : 바보 같은 질문. 평범한 눈으로 볼 수 없다면 TeraCopy가 더 빠르지 않습니다.
rautamiekka 2016 년

5
당신은 그것이 10 % 빠르다고 추정합니까? 두 번이나 빨리? 열 배나 빨리? 백만 배 더 빠릅니까? 두 개의 크고 동일한 테스트 세트로 rmdir에 대해 시간을 정할 수 있다면 좋을 것입니다.
휴고

1
감사합니다! 몇 년 동안 TeraCopy를 사용해 왔지만 대량 삭제 기능에 대해서는 알지 못했습니다. 그리고 당신 말이 맞아요. 훨씬 빠릅니다!
AzDayton

1
@Amalgovinus 당신은하지 않습니다. 끌어서 놓기 또는 마우스 오른쪽 단추 클릭을 통해 프로그램을 열고 파일 / 폴더를 추가하거나 탐색기 / 데스크탑에서 파일 / 폴더를 마우스 오른쪽 단추로 클릭하십시오. 걷기가 끝나면 원하는 경우 '삭제'와 '휴지통으로 이동'을 클릭하십시오.하지만 '디스크에서 삭제'를 선호합니다. 그러나 기본적으로 수행되지 않은 경우 데스크톱 / 탐색기에 마우스 오른쪽 버튼을 클릭하여 표시하려면 eraCopy를 관리자로 부팅해야합니다.
rautamiekka

6

나는 같은 일을하는 박쥐 파일을했다.

@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스크립트에서는 사용하지 말고 "%~1". 이런 식으로 인수가 따옴표와 함께 전달 된 경우에는 인용이 해제되고 다시 인용됩니다. 따옴표와 함께 전달되지 않은 경우 따옴표로 묶습니다.
Benoit

4

아래 코드를 사용하면 일반적으로 잘 작동합니다.

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe

robocopy 호출의 끝에`> nul`을 추가하면 화면에서 볼 필요가 없습니다.
JoshDM

rsyncLinux에서 의 사용과 유사합니다 . 여기 더 빠르지 rmdir않나요?
Hastur

참고로,이 robocopy는 del /f/q/s+와 매우 다릅니다 rmdir /s/q. dir_to_wipe에 정크가 c:\some_important_dir있으면 데이터가 손실됩니다.
Pavel P

@Pavel은 / XJ를 사용하여 접합점과 심볼릭 링크를 제외합니까?
Bernhard

이것은 델 / rmdir "method"가 비참하게 실패하게하는 수백 개의 디렉토리와 파일> 256자를 가진 ~ 36GB 디렉토리에 대한 트릭을 수행했습니다. Windows 탐색기에서 HOURS를 계산하는 데 몇 초가 걸렸습니다.

3

명령 프롬프트에서 rd / s 명령 을 사용하십시오 .


2
아니요. 탐색기에서 삭제하는 것만 큼 느립니다.
bobobobo

글쎄요. 어쨌든 del / f / s / q보다 잘 작동합니다.
bobobobo

3
글쎄, 이것은 실제로 탐색기를 사용하여 삭제하는 것보다 훨씬 낫습니다. 삭제가 실패하더라도 탐색기가 질식하고 중단되는 경우에도 계속 삭제됩니다.
bobobobo

2

가장 실용적인 해결책은 아마도 폴더를 어딘가 밖으로 이동시킨 다음 (예 : 휴지통) 삭제하는 것입니다. 나이가 들겠지만 최소한 방해가 될 것입니다.

나는 모든 파일을 삭제하는 데 필요한 시간이 작업의 본질적인 요구 사항이며 삭제 구현의 비 효율성이 아니라고 확신합니다.


1

Cygwin을 설치 하고 rm -r을 사용하십시오 . 그러나 그것은 과잉 일 것입니다.


그건 정확히 같은 rd /q /s...
조이

너무 많은 작업과 거의 동등한 속도!
adeelx April

1
여기에 몇 가지 다른 install-tool-X-and-use-it 답변보다 나쁘지 않으며, 그렇지 않은 경우 투표하지 않아야합니다.
JdeBP

2
cygwin은 rm실제로 cmd.exe 내장만큼 빠릅 rd니까? posix 인터페이스의 cygwin 에뮬레이션은 약간의 추가 작업이 필요하므로 다소 느리기 때문에 rm실제로는 감사하지 않습니다.
Jan Hudec

대량의 파일 모음이 삭제되기를 기다리는 동안 Cygwin을 설치하고 시도 할 시간이 충분했습니다 rm -rf. del /f/s/qCygwin에서는 디스크 사용량이 50 %에 불과했기 때문에 약 10 분 동안 중단 되었습니다. 아래 del에서 디스크 사용량이 100 %로 고정됩니다. 따라서 더 빨리 삭제해야한다고 생각합니다. 두 가지 방법 모두 CPU 사용량이 <1 %입니다. 10 분 동안 계산 한 후 Windows 파일 삭제기를 닫았 기 때문에 파일 번호를 잘 모르겠습니다.
Derek Ziemba

1

짧은 파일 이름 생성이 가능합니까? 그렇다면 정말로 필요합니까? 파일을 제거하는 것은 메타 데이터입니다. 따라서 제거 할 이름 수가 두 배인 경우 작업량이 훨씬 더 많습니다.


0

이 두 앱 중 하나를 사용해 보셨습니까?

가장 빠른 성능을 원하면 덮어 쓰기 수를 0으로 설정하십시오. 옵션을 클릭 한 다음 대화 상자의 맨 아래에있는 값을 변경하여이를 수행하십시오.

소스 필드에 삭제할 경로를 입력 한 후 삭제를 클릭하십시오.

이러한 앱은 파일을 휴지통에 넣지 않습니다. 주의해서 사용하십시오.


0

이것은 이전에 언급 된 답변에서 취한 단계를 칭찬하고 보강하기 위해 제공됩니다.

위의 두 가지 방법은 매우 효과적이지만 성능을 결정하는 것은 동일한 조건에 대해 벤치마킹하지 않는 한 어려울 것입니다.

  • 물리적 하드 드라이브 장치 및 모델
    • 바람직하게는 ATTO / Crystal Disk는 데이터를 복제하기 전에 벤치마킹했습니다.
  • 동일한 파티션 / 볼륨 위치 및 형상
    • 이를 수행하는 방법은 샘플 파티션 / 폴더를 조각 모음하고 정확히 동일한 유형의 하드 드라이브 2 개 (이전 단계에서)와 동일하게 복제하는 것입니다.
  • 그런 다음 배치 파일을 통해 구성을 실행하고 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

이름이 256자를

0

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

-1

폴더를 삭제하면 여러 파일을 삭제하는 것보다 빠릅니다.

따라서 명령 프롬프트 대신 마우스를 사용하려면 디렉토리를 만들고 파일을 이동 한 다음 삭제할 수 있습니다 (Shift + Del 사용).


2
디렉토리는 파일이있는 동일한 파티션에 작성되어야합니다. 이동 동작이 즉시 이루어집니다. 새 폴더와 파일이 별도의 파티션에 있으면 전체 복사 작업이 오래 지속됩니다.

5
폴더를 삭제하는 것이 내부 파일을 삭제하는 것보다 빠르다는 아이디어는 어디에서 얻습니까? 폴더를 삭제하면 모든 파일을 삭제하기위한 첫 번째 단계로 포함 에서 해당 폴더, 그래서 더 빨리 할 수 없습니다. 휴지통으로 이동하는 것은 완전히 다른 문제이지만 여기서는 문제가 아닙니다.
Joey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.