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


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.