디렉토리에서 모든 파일을 제거하는 방법?


289

내가 얻은 가장 가까운 것은

# rm /path/to/directory/*.*

그러나 확장자가없는 파일에는 작동하지 않습니다 ...

답변:


340

리눅스는 확장을 사용하지 않습니다. 이름의 확장자를 원하는지 여부를 결정하는 것은 파일 작성자에게 달려 있습니다. 리눅스는 1 번째 바이트를보고 어떤 종류의 파일을 다루고 있는지 알아냅니다.

디렉토리에서 모든 것을 제거하려면 다음을 사용하십시오.

rm /path/to/directory/*

다음과 같은 -r옵션을 사용할 수 있습니다 .

rm -r /path/to/directory/*

또한 컨텐츠를 제거 할 디렉토리 내부의 모든 하위 디렉토리 (모든 컨텐츠와 함께)를 제거합니다. 그렇지 않으면 디렉토리를 제거하지 않았다는 오류가 표시됩니다.


13
당신이 실행 shopt -s dotglob하기 전에 실행 숨겨진 파일을 삭제하려면rm (...)
danjjl

7
* 의미 all files;) 는 이름에 어딘가에 *.*포함 된 모든 파일을 의미합니다.
Rinzwind

10
@Rinzwind, 더 정확하게, 별표는 "0 개 이상의 문자"를 의미합니다. 따라서 *a*0 개 이상의 문자를 의미하고 a그 뒤에 0 개 이상의 문자 가 옵니다. 그것은 파일 이름과 일치하는 것 happy, apple, a또는 la.
DisgruntledGoat

7
@ user784637 당신은 너무 쉽게 감동합니다
barlop

1
원하는 명령은 다음과 같습니다.
rm-

168
  • 모든 내용이 포함 된 폴더 를 제거하려면 ( 모든 내부 폴더 포함 ) :

    rm -rf /path/to/directory
    
  • 폴더 자체가 아닌 폴더의 모든 내용 ( 모든 내부 폴더 포함) 을 제거하려면 :

    rm -rf /path/to/directory/*
    

    또는

    rm -rf /path/to/directory/{*,.*}
    

    숨겨진 파일 / 디렉토리도 제거해야합니다.

  • 폴더 내부에서 모든 "파일"을 제거하려면 ( 내부 폴더는 제거 하지 않음 ) :

    rm -f /path/to/directory/{*,.*}
    


  • 경고 : 경로에 공백이 있으면 항상 따옴표를 사용하십시오.

    rm -rf /path/to the/directory/*
    

    2 개의 개별 rm -rf호출과 같습니다.

    rm -rf /path/to
    rm -rf the/directory/*
    

    이 문제를 피하려면 '작은 따옴표 '( 쉘 변수를 확장하지 않음 ) 또는 "큰 따옴표 "( 쉘 변수를 확장 )를 사용할 수 있습니다.

    rm -rf "/path/to the/directory/"*
    


어디:

  • rm- " 삭제 "를 나타냅니다.
  • -f- 예를 들어 아카이브를 제거 할 것인지 묻거나 묻지 않으려는 경우 도움이되는 " 강제 "를 나타냅니다 .
  • -r- " 재귀 "의 약어 로, 모든 폴더를 재귀 적으로 내려 가고 모든 것을 제거하고 싶다는 의미입니다.

8
이 답변이 수락 됨으로 표시된 답변보다 더 포괄적이고 유용한 답변이라는 것을 알았습니다.
inspirednz

2
rm -rf /path/to/directory/*폴더에서 숨겨진 파일을 제거하지 않습니다 (예 :) .htaccess. 아마도 rm -rf /path/to/directory/.? 시도하지 않았습니다.
Mark Berry

@MarkBerry rm -rf /path/to/directory/.*
Lilian A. Moraru

@ LilianA.Moraru, 나는 오늘 약간의 테스트를했다. rm -rf /path/to/directory/.*지정된 디렉토리에서 숨겨진 파일 만 삭제합니다. @Rinzwind의 답변에 대한 @danjjl의 의견을보고 숨겨진 파일을 삭제하고 실행 shopt -s dotglob하기 전에 실행하십시오 rm -rf /path/to/directory/*.
Mark Berry

주의 : rm -rf /path/to/directory/.*시스템에서의 항목이 삭제되었습니다 /path/to. 다행히도 방금 전체 데이터를 별도의 디스크에 백업했습니다. 말할 필요도없이, rm -rf /path/to/directory/.*전체 컴퓨터를 별도의 안전한 위치에 백업하지 않은 경우 명령을 실행하지 마십시오 !
lawlist

43

숨겨진 파일 및 하위 디렉토리를 포함하여 디렉토리의 모든 파일을 제거하려면 다음을 실행하십시오.

rm -rf /path/to/directory/{*,.*}

1
이것은 아름다운 대답이되어야합니다. 감사합니다!
Nam G VU

3
이 글러브가 "."과 일치하지 않습니다. ".."도요?
hertzsprung

4
@hertzsprung - 그것은 않습니다, 그리고 당신은 삭제할 수 있음을 경고 줄 것 ./등을 ../,하지만 여전히 숨겨진 파일을 삭제합니다.
Ryan Wheale

Mac 콘솔에서는 작동하지 않으며 숨겨진 파일은 여전히 ​​해당 명령 줄에 있습니다.
agapitocandemor

현재 디렉토리를 모두 제거하려면 :rm -r $(pwd)/{*,.*}
Jimmy Adaro

10

/ path / to / directory에있는 파일 만 삭제하려면 다음을 수행하십시오.

find /path/to/directory -type f -print0| xargs -0 rm 

또는

find /path/to/directory -type f -exec rm '{}' \;

을 사용 find하여 로드를 수행 할 수 있는데 , 이점은 파이핑하지 않고 발견 된 항목을 나열하여 rm시작하기 전에 삭제 될 항목을 볼 수 있다는 것입니다.


2
GNU find-delete술어 로서 . 여전히을 사용 하려면를 -exec대신 \;사용 +하면 rm통화가 함께 모여 효율성이 향상됩니다.
enzotib

1
'+'가있는 많은 양의 파일은 목록이 rm -f *와 같이 너무 커서 문제가 발생할 수 있습니다. 그리고 같은 폴더에서 많은 양의 파일을 제거 할 때 (밀리그램으로 말하면) 두 가지 모두 좋지 않습니다.
오시스

3
rm 다음에-를 추가해야합니다. 그렇지 않으면 파일 이름이 -rf 또는 이와 유사한 경우 rm에 대한 인수로 해석됩니다. 예 : xargs -0 rm-또는 -exec rm-{} \;
Richm

xargs에 -n 인수를 제공 할 수도 있습니다. 그러면 rm 명령이 최대 개수의 인수 (예 : 'xargs -n 100 -0
rm-

1
find가 서브 디렉토리에서 파일을 리턴하지 않도록 -maxdepth 1을 추가 할 수도 있습니다. 즉 / path / to / directory 찾기 -maxdepth 1 -type f
Richm

7

디렉토리에서 모든 파일 및 디렉토리 ( 숨겨진 파일 포함)를 삭제하려면 다음을 시도하십시오.

  • 폴더를 삭제 한 다음 다시 만드십시오.

    rm -rf dir_name && mkdir dir_name
    
  • 사용하다 find

    find dir_name -mindepth 1 -delete  
    

여기서는 -mindepth 1디렉토리 dir_name 자체를 제외하도록 지정 합니다.
다음 링크를 살펴보십시오 :
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory


귀하의 조언에 감사 드리며 링크에 대한 추가 설명을 추가했습니다.
zeekvfu

3
폴더를 삭제하고 다시 만들면이 폴더에 대해 권한이 다르거 나 잘못 될 수 있으므로주의하십시오!
einjohn

6

모든 하위 디렉토리와 디렉토리 자체를 제거하려면을 사용할 수 있습니다 rm -rf /path/to/directory. 그러나 return 키를 누르기 전에 항상 줄을 다시 확인하십시오 rm -rf. 예를 들어 수퍼 유저 권한을 가지고 첫 번째 슬래시 뒤에 실수로 공백을 삽입하는 경우 많은 행동을 유발할 수 있습니다 ...


1

이 질문은 내가 직접 검색 할 때 끊임없이 Google의 최상위에 있기 때문에 :

다른 답변은 다른 문제로 고통받습니다.

  1. 그들 중 일부는 포함 .하고 .., 시끄러운 혼란, 그리고 성가신이다.

  2. 그들 중 일부는 숨겨진 파일 (점으로 시작하는 파일)을 잊어 버립니다.

  3. 디렉토리 삭제를 허용하기 위해 올바른 (가장 깊은) 순서로 삭제되지 않습니다.

  4. 그것들은 다른 (마운트 된) 파일 시스템으로 내려 가며, 종종 원하지 않는 파일 시스템입니다.

  5. 추가 매개 변수로 올바르게 확장하기가 어렵습니다 (아래에 더 자세히 설명되어 있음).

따라서 디렉토리의 모든 파일과 폴더를 정확하게 삭제하려면 다음을 수행하십시오.

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

-xdev마운트 /proc등 으로 내려가는 것을 막기 위해 인수를 추가했습니다 .

-depth-delete?

사람들이 끊임없이 저를 피하는데도 불구하고, 그 방법에는 단점이 있습니다. -prune더 많은 문제를 일으키지 않고 하위 디렉토리 를 허용 할만 큼 확장 가능한 것처럼 보이지 않습니다 . 이 방법과 달리 삽입 할 수 있습니다

-not \( -path "${DIR}/subdir" -prune \)

내용이 삭제되지 않도록 -mindepth인수 앞에 subdir.


그리고 깊이 우선 순위의 경우이를위한 -depth플래그 find가 있습니다.
Sergiy Kolodyazhnyy

어 ... 왜 그냥 사용 -delete으로find ? -delete깊이 우선입니다. 이미 find와 함께 비 POSIX 를 가정 -printf하고 있으므로 다음과 같이 사용 -delete하거나-depth -print0 | xargs -0 rm
muru

@muru : 더 잘 몰랐기 때문에 ... 변경하겠습니다.
Mehrdad

@muru : 사실, 그것은 당신의 방법이 작동하지 않는 것 같습니다 -not \( -path "$DIR/subdir" \)...하지만 내 것은합니까? 왜?
Mehrdad

@Mehrdad 그게 뭐야?
muru

0

기억할 경우 cd디렉토리로 들어간 다음 rm *.*DOS에서와 같이 명령을 실행할 수 있습니다 .


1
DOS는 파일의 경우 DEL이고 비어있는 디렉토리의 경우 RMDIR이며 숨겨진 파일과 시스템 파일의 경우 ATTRIB 속성을 먼저 제거해야합니다. 그리 간단하지는 않습니다.)
Eric

0

현재 디렉토리를 삭제하려면 예를 들어 rm -d ./*

-d는 디렉토리를 삭제하도록 지시합니다.

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