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.