디렉토리 내용을 삭제하는 가장 쉬운 방법은 무엇입니까?

디렉토리 내용을 삭제하는 가장 쉬운 방법은 무엇입니까?

나는 자주 사용한다

ls -ld .
# remember current user and group
chown -R user.group .
chown remembered_user.remembered_group .

디렉터리 자체 대신 디렉터리의 모든 파일과 디렉터리를 재귀적으로 삭제하는 더 쉬운 방법이 있습니까? 숨겨진 파일을 포함해야 하며 파일 수에 관계없이 작동해야 합니다.

답변1

를 사용 하면 한 번에 최대한 많은 매개변수를 전달하면서 find매개변수 목록이 너무 길어지는 것을 방지 할 수 있습니다 ( 대신 을 사용하세요 ). 필요하지 않은 일부 매개변수를 제거할 수 있습니다 (디렉토리를 삭제하지 않고 디렉터리에서만 사용됩니다).chown+;-prunechownchown -R

find . \! -iname . -prune -exec chown -R user:group {} +

답변2

chown디렉토리에서 재귀적으로 실행하지 않는 걸까요?

$ chown -R user.group *

.이전 디렉토리.

$ ll
total 20
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir1
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir2
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir3
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir4
drwxrwxr-x. 2 saml saml 4096 Apr  9 22:30 dir5

dir의 내용만 변경됩니다.

$ chown -R saml.wheel *

다음은 무엇입니까?

$ ll
total 20
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir1
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir2
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir3
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir4
drwxrwxr-x. 2 saml wheel 4096 Apr  9 22:30 dir5

그 동안 디렉터리는 .그대로 유지됩니다.

$ ls -ld .
drwxrwxr-x. 7 saml saml 4096 Apr  9 22:29 .

shopt -s dotglob숨겨진 파일이 있는 경우 bash, FIGNORE='@(.|..)'ksh93 및 setopt dot_globzsh 에서 glob에 해당 파일을 포함하도록 쉘이 설정되어 있는지 확인하십시오.

또는 일치하는 패턴을 추가합니다(zsh 이외의 쉘에서는 .*일치할 예정입니다 .) ...

chown -R saml.wheel * .[!.]* ..?*

아니면 zsh에서 간단히

chown -R saml.wheel *(D)

답변3

zsh에서:

chown user:group **/*(D)

이것글로벌 예선 D도트 파일이 일치한다는 의미입니다.

chown셸 대신 재귀 순회를 사용할 수 있습니다 .

chown -R user:group *(D)

파일이 너무 많아 명령줄이 너무 길어지는 것이 걱정된다면 다음을 로드하세요.chown내장~에서zsh/파일 모듈.

zmodload zsh/files
chown user:group **/*(D)

chown내장 함수를 참조하지 않으려면 이름만 로드하면 됩니다 zf_*.

zmodload -Fm zsh/files b:zf_\*
zf_chown user:group **/*(D)

명령줄 제약 조건에 맞지 않을 수 있는 긴 파일 목록에서 외부 명령을 호출해야 하는 경우(여기서는 그렇지 않음) 다음을 사용할 수 있습니다.zargs기능:

autoload -U zargs
zargs -- **/*(D) -- chown user:group --

답변4

첫 번째 디렉토리에 파일이 많으면 Chris Down의 답변이 여전히 실패할 수 있습니다.

find . \! -iname . -exec chown user:group {} \;

Chris Down의 답변은 아마도 대부분의 경우 실패하지 않을 것이며 이 답변보다 빠를 수도 있지만 귀하의 질문에 정확히 답변하고 싶습니다.

또한 내 상황에 더 잘 맞는 약간 다른 명령이 있습니다. 나는 스크립트에서 디렉토리를 변경하는 것을 좋아하지 않기 때문에 다음과 같은 명령을 작성했습니다.

find /foo/bar/baz \! -samefile /foo/bar/baz -exec chown user:group {} \;

관련 정보