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

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

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

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" * 디렉토리 공간 1 디렉토리 공간 2

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

관련 정보