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


76

디렉토리의 모든 파일과 하위 디렉토리를 제거하려고합니다. 내가 사용하는 rm -r모든 파일을 제거,하지만 난 모든 파일을 제거 할 및 상단 디렉토리 자체를 제외하고 하위 디렉터리를.

예를 들어,와 같은 최상위 디렉토리가 images있습니다. 이 파일 포함 header.png, footer.png및 하위 디렉토리를.

지금은 삭제할 header.png, footer.png및 하위 디렉토리가 아니라 images.

리눅스에서 어떻게 할 수 있습니까?


1
디렉토리에 cd rm -Rf하고 거기에있는 모든 파일과 디렉토리를 수행하십시오.
— Noufal Ibrahim

답변:


59

최상위 디렉토리가 images이면을 실행하십시오 rm -r images/*. 이것은 쉘 glob 연산자 *를 사용하여 rm -r에있는 모든 파일이나 디렉토리에서 실행 됩니다 images.


30
숨겨진 파일은 삭제되지 않습니다.
— reto

50

숨겨진 파일을 삭제하려면 다음을 지정해야합니다.

rm -r images/* images/.*

globs가 포함 된 쉘의 경우 다음 .과 ..같은 오류가 발생합니다.

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

그러나 숨겨진 파일은 삭제됩니다.

오류 메시지가없는 방법은 mindepth와 함께 찾기 / 삭제를 사용하는 것입니다. 이것은 gnu-find입니다.

find images -mindepth 1 -delete

찾기에는 -mindepth또는 -delete술어가 없을 수 있습니다.이 경우 다음을 수행 할 수 있습니다.

find images/. ! -name . -prune -exec rm -rf {} +

내 제안은 'images /../ ..'가 아닌 'images / ..'와 일치하는 'rm -r images /.*'를 사용하는 것이 었습니다. 'images /../ images / ..'는 다시 동일한 디렉토리이므로 재귀는 위로 올라갈 수 없습니다.
— 사용자 알 수 없음

4
@DarkHeart은 rm .*삭제되지 않습니다 .또는 ..과 가없는 UNIX 용 70 년대 후반 이후 적어도 GNU 유틸 1994 가능성부터 . rm .*박물관 밖에서 파일 시스템을 가로 지르는 시스템을 찾을 가능성은 거의 없습니다 .
— terdon

21

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

  • ls -Ab모든 파일 / 디렉토리를 일치시키는 데 사용

    cd dir_name && rm -rf `ls -Ab`
    
  • find모든 파일 / 디렉토리를 일치시키는 데 사용

    find dir_name -mindepth 1 -delete
    

    또는 find지원하지 않는 경우 -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • 폴더를 삭제 한 다음 다시 만드십시오.

    rm -rf dir_name && mkdir dir_name
    
  • bash에서

    shopt -s dotglob  
    rm -rf dir_name/*
    

(하이픈)으로 rm -rf *시작하는 파일 -은 rm플래그 로 해석 되므로 디렉토리에있는 파일에 대한 지식이 없으면 like 같은 명령 은 안전하지 않습니다 .
— VasyaNovikov

1
편집 : 그것을 안전하게 사용하려면rm -rf ./* ./.*
— VasyaNovikov

9

디렉토리 내에서 모든 일반 파일을 재귀 적으로 삭제하려면 이 명령 (GNU 또는 FreeBSD 가정 find)으로 충분합니다.

find . -type f -delete

심볼릭 링크 (정규 파일을 가리키는 지 여부), 디렉토리, fifo, 소켓, 장치와 같은 모든 비정규 파일은 그대로 둡니다.

또한보십시오:

find . ! -type d -delete

directory를 제외한 모든 유형의 파일을 삭제합니다 .


6

이 버전을 사용해보십시오 :

 rm -r test/*

1
숨겨진 파일 ( "."로 시작하는 파일)은 제거되지 않습니다.
— gbmhunter

3

나는 find여기에 명령을 사용하고 있습니다 :

1 단계 : 모든 파일을 찾아 삭제합니다.

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

예:

find /home/user/Desktop/images/ -type f -exec rm {} \;

2 단계 : 모든 하위 디렉토리를 찾아 삭제하십시오.

find /path/to/directory/ -type d -exec rm -R {} \;

find /path/to/directory/ -type d포함 .하면 디렉토리 자체가 삭제됩니다. -mindepth다른 사람들이 말했듯 이 스위치 도 사용해야합니다 .
— Arthur Tacca

3

문제는 디렉토리를 비우는 것 = 숨겨진 파일을 포함한 디렉토리의 내용을 제거하지만 디렉토리 자체는 제거하는 것이 었습니다. -mindepth 1의 find 명령은 실제로 올바른 방법이지만 오류 메시지를 피하려면 -maxdepth 1과 결합해야합니다.

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;

0

rm의 구문은 다음과 같습니다.

rm [OPTION]... FILE...

따라서 적절한 경로를 명시 적으로 명시해야합니다. 예 :

rm -r sub_dir/

0

다음 명령을 사용하여 디렉토리를 제거 할 수 있습니다.

sudo rm -r directoryname1/2/3/*

3 / * 후에 전체 디렉토리가 삭제됩니다.

sudo rm -r 다운로드 / 노래 / * 예

안에있는 모든 파일이 삭제됩니다 Downloads/song.


0

이것은 나에게 완벽하게 작동하며 매번 여러 변형이 테스트되었습니다.

images 디렉토리가있는 디렉토리에서.

rm -frd ./images/*

전에:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

후:

images/

원래 질문에서 확실하지는 않았지만 dotglob를 활성화하지 않으면 이미지 아래의 "dot-file"또는 dot-directory ( mkdir images/.somedir; touch images/.somefile) 를 건너 뜁니다 .
— Jeff Schaller

0

숨겨진 디렉토리를 포함 하여 현재 디렉토리에서 오류 메시지없이 모든 파일과 서브 디렉토리를 삭제하려면 다음을 수행하십시오.

rm -rf .[^.] .??* *

또는 상위 디렉토리에서 :

rm -rf images/.[^.] images/.??* images/*

에서 https://serverfault.com/a/47940/269538 .



-2

"test"폴더와 내부의 모든 파일을 삭제하십시오.

 rm -r test

내부의 모든 파일을 삭제하고 "test"폴더를 유지하십시오.

 rm -r test/*

-4

폴더에 cd 한 후 다음 명령을 실행하십시오.

ls |xargs rm -rf

2
공백이 포함 된 파일 이름에서는 실패합니다. ls의 출력을 다른 명령의 입력으로 사용하지 않는 것이 좋습니다. 일반적으로 안전하지 않습니다.
— dhag
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.