"rm -rf"는 Windows와 동일합니까?


509

폴더와 하위 폴더를 재귀 적으로 삭제하는 방법이 필요합니다.

이를 위해 사전 구축 된 도구가 있습니까, 아니면 작성해야합니까?

DEL /S 디렉토리를 삭제하지 않습니다.

DELTREE Windows 2000 이상에서 제거되었습니다


1
del / s (a) 전혀 작동하지 않습니까 (일부 버전에서만 사용 가능) 또는 (b) 최상위 디렉토리는 그대로두고 그 아래에있는 모든 것을 삭제하거나 (c) 모든 파일을 삭제하면서 모든 디렉토리를 남겨 두겠습니까?
wnoise

@Aaron, 대답 c, 디렉토리와 파일을 제거하려면 rmdir / s를 사용해야합니다.
웨지

31
그렇다면 실제로 format c:Linux를 설치 하지 않습니까? 물론 농담입니다.
Basile Starynkevitch

답변:


694

기본 명령 프롬프트 (cmd.exe)를 사용하는 경우 RMDIR 또는 RD :

rd /s /q "path"

RMDIR [/ S] [/ Q] [드라이브 :] 경로

RD [/ S] [/ Q] [드라이브 :] 경로

/ S 디렉토리 자체뿐만 아니라 지정된 디렉토리의 모든 디렉토리와 파일을 제거합니다. 디렉토리 트리를 제거하는 데 사용됩니다.

/ Q 자동 모드, / S를 사용하여 디렉토리 트리를 제거 할 것인지 묻지 마십시오.

당신이 PowerShell을 사용하는 경우 사용할 수 있습니다 Remove-Item(별명되는 del, erase, rd, ri, rmrmdir)과 소요 -Recurse단락 될 수 인수-r

rd -r "path"

84
많은 수의 파일에 대해 rmdir / s / q는 일반적으로 탐색기의 동등한 "select dir, shift + delete"작업보다 훨씬 빠릅니다.
웨지

9
이것은 rm -rf처럼 파일을 삭제하지 않으며 디렉토리가 존재하지 않을 때 0이 아닌 값을 리턴하므로 rd /s /q foo && echo "yay"디렉토리 "foo"가 존재하지 않으면 실패합니다.
Dirk Groeneveld

17
만약에 dir. 비어 있지 않고 일부 파일은 가져 Access is denied오고 다른 파일은 가져옵니다 The process cannot access the file because it is being used by another process.
유진

6
난 그냥 7에 이것을 시도하고 당신은 / S와 / Q (모자)를해야합니다
포드 prefect

2
여기에 미스터리. 내가 알고 내가이 명령을 시도하고 디렉토리 트리에있는 파일이 있다면 그것이 작동하지 않았다; 이제 돌아가서 . . 마술처럼 작동하는 것 같습니다. 다른 사람이 이것과 일치하지 않는 동작을 경험합니까?!
Alex Hall

139

관리자:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

sys 파일을 포함하여 무엇이든 작동

편집 : 실제로 파일 경로가 너무 긴 문제를 해결하는 가장 좋은 방법을 찾았습니다.

mkdir \empty
robocopy /mir \empty folder

3
내 영웅! 그리고 하나의 팁 : 당신은 C에서 귀하의 빈 폴더를 만들 : \ 비우, 각 미친 폴더 안에 일단, 하나 그냥 할 수있는robocopy /mir c:\empty .
레옹의 Pelletier

(가) takeown내가 실수로 rsync를 리눅스 시스템에서 폴더를 복사 내가 그 폴더를 제거 할 권한이 없었다 나를 도와 ...조차 ROBOCOPY 일했다. 감사합니다
Jarda

1
아주 좋은 대답입니다. 효과가있다. (페이지의 다른 모든 답변은 그렇지 않습니다). 그러나 cacls는 더 이상 사용되지 않습니다. 현대적인 대답을 할 수 있습니까? 두 번째 변형은 이미 작동하며 더 이상 사용되지 않습니다.
Gangnus

이것은 나를 위해 아무것도하지 않습니다. 누군가 어떻게 작동하는지 설명해 주시겠습니까? (robocopy)-폴더 자체가 아닌 폴더의 내용을 삭제할 수 있습니다
Ralf

114

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S 디렉토리 자체 외에 지정된 디렉토리의 모든 디렉토리 및 파일을 제거합니다. 디렉토리 트리를 제거하는 데 사용됩니다.

  • /Q 자동 모드, 디렉토리 트리를 제거해도 괜찮은지 묻지 마십시오. /S


13
매개 변수 설명에 감사드립니다. 받아 들여진 대답은 불행히도 이것을하지 않습니다.
Thomas

1
질문에 대한 가장 단순하고 완벽한 답변. 받아 들여 져야합니다.
Artif3x 2016 년

19

당신이 가지고있는, Cygwin에서 설치할 수 있습니다 rm뿐만 아니라 ls


19

경로로 이동하여이 명령을 트리거하십시오.

rd /s /q "FOLDER_NAME"

/ s : 지정된 디렉토리와 파일을 포함한 모든 하위 디렉토리를 제거합니다. / s를 사용하여 나무를 제거하십시오.

/ q : rmdir을 자동 모드로 실행합니다. 확인없이 디렉토리를 삭제합니다.

/? : 명령 프롬프트에 도움말을 표시합니다.


9

디렉토리를 삭제하려면 (존재하든 없든) 다음을 사용하십시오.

if exist myfolder ( rmdir /s/q myfolder )


6

대답은 훌륭하지만 Node가 설치되어 있다고 가정하면 노드 라이브러리 "rimraf"를 사용하여이 패턴을 훨씬 더 정확하게 수행 할 수 있습니다. 이것을 많이 사용하는 경우 (내가 할 수 있음) 전역으로 설치하십시오.

yarn global add rimraf

예를 들어 끊임없이 사용하는 패턴은 다음과 같습니다.

rimraf .\**\node_modules

또는 전체 설치를 피할 수 있지만 패키지 동적 다운로드에는 약간 더 오래 걸리는 단일 라이너의 경우 :

npx rimraf .\**\node_modules

2
OS에 구애받지 않으므로 문제에 대한 확실한 해결책입니다.
Denialos

5

이 명령을 시도하십시오 :

del /s foldername

일부 파일이 잠겨 있고 rmdir이 실패하면 w / rmdir / s / q와 함께 나를 위해 일했습니다. del / foldername은 잠긴 파일을 숨겨서 rmdir이 root dir을 제거하도록 허용했습니다. 좋은.
bbqchickenrobot


4

먼저 무엇을하는지 검토해 봅시다 rm -rf.

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

rm -rf돌아올 것으로 예상되는 곳에 일반적으로 사용되는 세 가지 시나리오가 있습니다 0.

  1. 지정된 경로가 존재하지 않습니다.
  2. 지정된 경로가 존재하며 디렉토리입니다.
  3. 지정된 경로가 존재하며 파일입니다.

나는 전체 권한을 무시할 것입니다. 그러나 아무도 권한을 사용하거나 Windows의 사물에 대한 쓰기 액세스를 거부하려고 시도하지 않습니다 (좋아요.

먼저 0으로 설정ERRORLEVEL 한 다음 경로인지 여부에 따라 다른 명령을 사용하여 경로가 존재하는 경우에만 경로를 삭제하십시오. IF EXIST설정하지 않는 ERRORLEVEL경로가 존재하지 않는 경우이므로 설정, 0 ERRORLEVEL0 처음 제대로하는 방법 모방 정상에서 성공을 검출 할 필요가 rm -rf사용. 와 달리과 ( RDIF EXIST)를 보호해야합니다. 와 RD달리 rm -f대상이 없으면 오류가 발생합니다.

다음 스크립트 스 니펫은 DELPATH가 미리 인용되어 있다고 가정합니다. (이것은 당신이 같은 것을 할 때 안전합니다SET DELPATH=%1 . 퍼팅 시도 ECHO %1A의 .cmd그것에게 그것에 공백이 인수를 전달하고 자신을 위해 무슨 일 참조). 스 니펫이 완료되면로 오류를 확인할 수 있습니다 IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

요점은 환경이 POSIX를 준수 할 때 모든 것이 더 간단하다는 것입니다. 또는 최소한의 MSYS를 설치하고 사용하면됩니다.



3

여기 당신이해야 할 일이 있습니다 ...

다음 줄을 사용하여 배치 파일을 만듭니다.

RMDIR /S %1

배치 파일을 다른 이름으로 저장 Remove.bat하고 넣습니다.C:\windows

다음 레지스트리 키를 만듭니다.

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

다음 값 regedit으로 기본값을 시작 하고 업데이트하십시오.HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default

"c:\windows\REMOVE.bat" "%1"

그게 다야! 이제 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 RMDIR 기능을 사용할 수 있습니다


3

Powershell 5.1 사용

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

교체 로그를 삭제할 디렉토리 이름으로.

get-childitem 은 현재 경로 (.)에서 재귀 적으로 children 디렉토리를 검색합니다.

항목 제거 는 결과를 삭제합니다.


2

GnuWin32 를 설치 하고 Windows에서 기본적으로 * nix 명령을 사용할 수 있습니다 . 민트색의 신선한 창문에 다른 것을 설치하기 전에 이것을 설치합니다. :)


2

자신의 책임하에 사용하십시오. '있는 그대로'제공되는 정보. 광범위하게 테스트되지 않았습니다.

Windows 아이콘 (일반적으로 왼쪽 아래)을 마우스 오른쪽 단추로 클릭하고 "Windows PowerShell (관리자)"를 클릭 한 다음이 명령을 사용하십시오 (주의를 기울이지 않으면 조심스럽게 모든 파일을 쉽게 삭제할 수 있습니다).

rd -r -include *.* -force somedir

somedir비어 있지 않은 디렉토리는 어디 에서 제거 할 것입니까?

연결된 외부 디스크 나 문제가있는 디스크의 경우 Windows에서 이상한 동작을하는 경우가 있습니다. 삭제 (또는 복사 시도)에서 오류가 발생하지 않지만 지침에 따라 디렉토리가 삭제 (또는 복사)되지 않습니다. (이 경우 적어도 나에게 @n_y가 대답으로 제공 한 명령은 'get-childitem : 파일 또는 디렉토리가 손상되어 읽을 수 없습니다.'와 같은 오류가 발생한다는 것을 알았습니다.


1

Windows 시스템에 npm 패키지를 설치하는 데 문제가 있고 " rm -rf..."명령을 찾을 수 없다는 오류가 표시되는 경우 누구에게나 중요한 답변 입니다 . bash cli 를 사용하여 Windows에서 rm 명령을 실행할 수 있습니다 .

npm 사용자의 npm config set script-shell "C:\Program Files\Git\bin\bash.exe"경우, 설치하려는 npm 패키지에 명령 을 사용하는 설치 후 스크립트 가 있는 경우 npm 패키지의 설정을 변경하거나 비활성화하지 않고도 rm -rf해당 rm명령 을 실행할 수 있습니다. 설치 후 스크립트 구성. 예를 들어, 설치 후 스크립트에서 명령을 styled-components사용합니다.rm

그냥 사용하려는 경우 rm명령을, 당신은 쉽게 배쉬를 사용하고 인수를 전달할 수 있습니다.

따라서 Windows에서 'rm'명령을 사용할 수 있습니다.


0

여기 나를 위해 일한 것이 있습니다 :

경로의 길이를 줄이십시오. 즉 : 그러한 파일로 연결되는 모든 폴더의 이름을 가능한 가장 작은 이름으로 바꿉니다. 한 글자의 이름을 말하십시오. 폴더 계층에서 위쪽으로 이름을 바꾸십시오. 이를 통해 경로 길이를 효과적으로 줄입니다. 이제 파일을 바로 삭제하십시오.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.