디렉토리 내용을 삭제하는 올바른 방법

디렉토리 내용을 삭제하는 올바른 방법

삭제하는 올바른 방법은 무엇입니까모두해당 디렉토리가 없는 디렉토리의 내용은 무엇입니까?
예를 들어, 다음과 같은 디렉터리 구조가 있습니다.

foo/
    bar1/
    bar2/
    x.txt

bar1폴더 와 bar2파일을 삭제하고 싶습니다 x.txt.삭제하지 않고 foo.

또한 무시되거나 오류가 발생할 수 있는 특수 문자가 포함된 파일 이름을 고려하십시오.


편집 #1(9월 30일, 18:26 UTC):
내 질문이 다음 질문과 중복되지 않는 것 같습니다.이 질문, 제가 ​​삭제를 요청했기 때문에모든 것다른 질문은 그렇지 않았고 답변에는 그러한 솔루션이 포함되지 않았습니다.

답변1

디렉토리를 알고 있다면 다음 명령 중 하나를 사용하여 수행할 수 있습니다.

$ find foo/* -delete

$ rm -fr foo/*

$ find foo/* -exec rm -fr {} +

점( .)으로 시작하는 파일이 있는 경우 수정된 버전의 가 필요합니다 rm.

$ rm -fr foo/{*,.*}

$ ls -l foo
drwxrwxr-x    6 saml saml  4096 Sep 27 09:43 .
drwx------. 263 saml saml 32768 Sep 27 09:42 ..
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir2
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space2

$ rm -fr foo/{*,.*}
rm: cannot remove directory: `adir/.'
rm: cannot remove directory: `adir/..'
$

$ ls -l foo/
total 0
$

새로운 파일 디렉토리로 반복:

$ find foo/* -delete
$

특수문자 다루기

foo tastic공백이 포함된 이름의 디렉토리가 있는 경우 인용할 수 있지만 여전히 와일드카드를 사용하십시오.

$ rm -fr "foo tastic"/*

특수 문자

나는 종종 이 트릭을 사용하여 파일 이름 조합을 실행하기 전에 쉘이 내 파일 이름 조합을 어떻게 생각하는지 확인합니다. 위에서 사용한 샘플 디렉터리에서:

$ ls -1 "file "* 파일 공간1 파일 공간2

$ ls -1d "dir "* 디렉토리 space1 디렉토리 space2

이러한 테스트를 미리 수행하면 glob이 포함된 명령이 사용될 때 어떤 파일/디렉토리가 작동하는지 알 수 있습니다.

관련 정보