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


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.