삭제하는 올바른 방법은 무엇입니까모두디렉토리의 내용에 디렉토리가 나와 있지 않습니까?
예를 들어, 다음과 같은 디렉터리 구조가 있습니다.
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이 포함된 명령을 사용할 때 어떤 파일/디렉토리가 사용되는지 알 수 있습니다.