나는 자주 사용한다
ls -ld .
# remember current user and group
chown -R user.group .
chown remembered_user.remembered_group .
디렉터리 자체 대신 디렉터리의 모든 파일과 디렉터리를 재귀적으로 삭제하는 더 쉬운 방법이 있습니까? 숨겨진 파일을 포함해야 하며 파일 수에 관계없이 작동해야 합니다.
답변1
를 사용 하면 한 번에 최대한 많은 매개변수를 전달하면서 find
매개변수 목록이 너무 길어지는 것을 방지 할 수 있습니다 ( 대신 을 사용하세요 ). 필요하지 않은 일부 매개변수를 제거할 수 있습니다 (디렉토리를 삭제하지 않고 디렉터리에서만 사용됩니다).chown
+
;
-prune
chown
chown -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_glob
zsh 에서 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 {} \;