유닉스에서 현재 디렉토리와 그 아래에있는 모든 것을 어떻게 제거합니까?


108

나는 이것이 하위 디렉토리와 그 아래의 모든 것을 삭제한다는 것을 알고 있습니다.

rm -rf <subdir-name>

그러나 현재 디렉토리의 모든 항목과 그 아래의 모든 하위 디렉토리 및 모든 하위 디렉토리의 내용을 어떻게 삭제합니까?


2
이것은 속임수 여야합니다. stackoverflow.com/questions/550922/…
jmucchiello

답변:


166

안전한 컴퓨팅을 연습하십시오. 계층 구조에서 한 수준 위로 이동하고 와일드 카드 식을 사용하지 마십시오.

cd ..; rm -rf -- <dir-to-remove>

두 개의 대시 --에게 rm<dir-to-remove>이 대시로 시작하는 경우에도, 명령 줄 옵션이 아닙니다.


8
이것이 더 안전한 이유는 무엇입니까?

34
특별히 명명 된 디렉터리와 일치하므로 삭제할 의도가없는 항목을 삭제할 가능성이 적기 때문입니다.
tvanfosson

5
진실. 나는 그것을 꽤 쉽게 할 수 있었다.

26
디렉토리 자체도 삭제하지 않습니까? 나중에 mkdir <dir-to-remove>를 수행해야합니다. 그러나 그 디렉토리를 참조하는 하드 링크는 나중에 별개의 디렉토리가됩니다.
Johannes Schaub-litb

5
@Yen, 사용 rm ./하면 실수로 입력 rm . /하면 재앙이 될 수 있습니다.
irfandar

44

현재 파일 아래의 모든 파일 / 디렉터리를 삭제합니다.

find -mindepth 1 -delete

당신이 가지고있는 이름을 가진 다른 디렉토리에 대해 똑같이하고 싶다면, 그냥 이름을 붙일 수 있습니다.

find <name-of-directory> -mindepth 1 -delete

하위 디렉토리 및 파일뿐만 아니라 디렉토리 자체도 제거하려면 -mindepth 1. -delete제거 할 항목의 목록을 얻으려면 없이 수행하십시오 .


하위 디렉터리의 모든 파일을 삭제해야했지만 하위 디렉터리 자체는 삭제하고 싶지 않았습니다. find <name-of-direcotry> -mindepth 2 -delete 잘 작동했습니다!
Tim Dearborn 2013 년

-mindepth 1디렉토리 ( find <name-of-directory> -mindepth 1 -delete)를 지정하는 경우 필요 합니다 . 그렇지 않으면 Johannes가 옳은 것은 현재 작업 디렉토리를 삭제하지 않을 것입니다 find -delete.
Weboide

IMO, 이것은 특히 스크립트에서 가장 좋은 답변입니다.
wizonesolutions 2015

1
시도 : find -mindepth 1 -delete하지만 얻었 illegal option -- m지만 mindepth 옵션을 제거했을 때 훌륭하게 작동했습니다 find . -delete
sharon

41

내가 항상하는 것은 타입

rm -rf *

그리고 다음 ESC- *을 공격 하고, 배쉬는 현재 작업 디렉토리에있는 파일 및 디렉토리의 명시 적 목록에 *을 확장됩니다.

이점은 다음과 같습니다.

  • ENTER를 누르기 전에 삭제할 파일 목록을 검토 할 수 있습니다.
  • 명령 기록에는 와일드 카드가 그대로있는 "rm -rf *"가 포함되지 않습니다. 그러면 잘못된 시간에 잘못된 위치에서 실수로 재사용 될 수 있습니다. 대신 명령 기록에 실제 파일 이름이 있습니다.
  • 또한 "잠시만 기다려주십시오 ... 내가 방금 삭제 한 파일은 무엇입니까?"라고 대답하는 것이 한두 번 편리해졌습니다. 파일 이름은 터미널 스크롤 백 버퍼 또는 명령 기록에 표시됩니다.

사실, 나는 이것을 너무 좋아해서 .bashrc에서 다음 줄을 사용하여 TAB의 기본 동작으로 만들었습니다.

bind TAB:insert-completions

--이 답변이 누락 되었습니까? 이 접근 방식은 전반적으로 굉장합니다.
Ben Voigt 2014 년

더 나은 방법은 sudo로 실행하는 것입니다
Abbas Torabi

22

사용하다

rm -rf *

업데이트 : .현재 디렉토리를 나타내지 만 사용할 수 없습니다. 명령에 .및에 대한 명시 적 검사가있는 것 같습니다 ... 대신 와일드 카드 글 로빙을 사용하십시오. 그러나 이것은 위험 할 수 있습니다.

더 안전한 버전 IMO는 다음을 사용하는 것입니다.

rm -ri * 

(모든 파일 / 디렉토리를 삭제하기 전에 확인하라는 메시지가 표시됩니다.)


13
"위험 할 수있다"는 말은 매우 간결합니다.

5
이런 일을 할 때 빠른 ls -r을 찾았습니다. 먼저 삭제할 내용을 볼 수 있습니다. 전체 디스크를 삭제하지 않을 것이라는 빠른 아이디어를 제공하는 데 유용합니다.
Rich Bradshaw

2
rm -rf <subdir-name>보다 위험한 이유는 무엇입니까?

2
@Yen-잘못된 장소에서 수행하면 비참한 결과를 얻을 수 있기 때문입니다. 잘못된 위치에 특정 이름을 사용하면 동일한 하위 디렉토리가 존재하는 경우에만 잘못 될 수 있습니다.
tvanfosson

1
자녀에 거주하는 동안에는 부모를 삭제할 수 없습니다.
열심히

6

rm –rf .모든 하위 디렉토리와 그 내용을 포함하여 현재의 모든 것을 직접 제거하는 것이 정확합니다 . 하나의 점 ( .) 현재 디렉토리를 의미합니다. 이중 점 ( )은 이전 디렉토리를 의미 rm -rf ..하므로 하지 않도록주의 하십시오...

즉, 당신이 나와 같고 동시에 여러 개의 터미널 창이 열려 있다면 안전하고 rm -ir .Lets look at the command arguments를 사용하여 이유를 이해하는 것이 좋습니다.

첫째, rm명령 매뉴얼 페이지 ( man rm대부분의 Unix에서)를 보면 –r"디렉토리 내용을 재귀 적으로 제거" 한다는 의미입니다. 따라서 rm -r .혼자 수행 하면 현재 디렉토리의 모든 항목과 그 아래의 모든 항목이 삭제됩니다.

에서 rm –rf .추가 -f 수단 "결코 프롬프트, 존재하지 않는 파일을 무시". 이 명령은 현재 디렉터리에있는 모든 파일과 디렉터리를 삭제하고 실제로 수행 할 것인지 확인하는 메시지를 표시하지 않습니다. -f권한이있는 사용자로 명령을 실행하면 실제로 원하는 내용인지 확인하지 않고 디렉토리의 내용을 삭제할 수 있으므로 특히 위험합니다.

otherhand에,에 그 대신 "어떤 제거하기 전에 프롬프트"의미. 즉, rm이 모든 파일을 행복하게 삭제하기 전에 "oups! 그건 내가 원하는 것이 아닙니다"라고 말할 기회를 얻게됩니다.rm -ri .-i-f

초기 시스템 관리자 시절 rm -rf /에는 전체 권한 (루트)으로 로그인하는 동안 시스템에서 작업을 수행했습니다. 그 결과 백업에서 시스템을 복원하는 데 이틀이 지났습니다. 그래서 지금 고용하고 rm -ri있습니다.


6

어때 :

rm -rf "$(pwd -P)"/* 

27
jQuery는 매우 강력합니다.
Pawel 2013

5
rm  -rf * 

하지마! 이건 위험 해! 올바른 디렉토리에 있는지 확인하십시오!


4

확인 하십시오 올바른 디렉토리에

rm -rf *

2
이름이 마침표로 시작하는 파일이나 하위 디렉터리는 삭제되지 않습니다.

1
진실. 내 테스트에서 rm -rf도 마찬가지입니다. tvanfosson은 "cd ..; rm -rf <dir-to-remove>"로 최상의 솔루션 IMO를 보유하고 있습니다.
digitaljoel

2

이 가장 간단한 안전하고 일반적인 솔루션은 다음과 같습니다.

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

1

이 대답이 더 낫다고 생각합니다.

/unix/12593/how-to-remove-all-the-files-in-a-directory

최상위 디렉토리가 images이면 rm -r images/*. 이것은 쉘 glob 연산자 *를 사용하여 rm -r이미지 내의 모든 파일 또는 디렉토리에서 실행 됩니다.

기본적으로 한 단계 위로 올라간 다음 X 디렉토리 내의 모든 것을 삭제한다고 말합니다. 이렇게하면 원본 폴더를 보존하면서 '여기에서 모두 삭제'라고 말하는 것보다 더 안전한 콘텐츠를 삭제할 폴더를 지정할 수 있습니다 (허용되지 않거나 원하지 않기 때문에 원하는 경우도 있음 폴더의 기존 권한을 수정하려면)

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