![디렉토리 내용을 삭제하는 올바른 방법](https://rvso.com/image/50569/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EC%98%AC%EB%B0%94%EB%A5%B8%20%EB%B0%A9%EB%B2%95.png)
삭제하는 올바른 방법은 무엇입니까모두해당 디렉토리가 없는 디렉토리의 내용은 무엇입니까?
예를 들어, 다음과 같은 디렉터리 구조가 있습니다.
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이 포함된 명령이 사용될 때 어떤 파일/디렉토리가 작동하는지 알 수 있습니다.