방금 내 홈 디렉터리의 모든 파일/하위 디렉터리를 다른 사용자의 홈 디렉터리로 복사했습니다.
그런 다음 나는 그의 홈 디렉토리로 재귀를 만들어 chown
그가 모든 파일/하위 디렉토리의 소유자가 되도록 했습니다.
내가 마지막으로 해야 할 일은 chgrp
그의 사용자 이름이 내 사용자 이름이 아닌 그의 모든 파일/하위 디렉터리의 그룹이 되도록 그의 홈 디렉터리로 재귀하는 것입니다.
문제는 그룹이 "docker"인 하위 디렉터리가 여러 개 있다는 것입니다. 이 하위 디렉터리에는 그룹이 내 사용자 이름인 일부 파일/디렉터리와 그룹이 "docker"인 일부 파일/디렉터리가 있습니다.
내 사용자 이름이 속한 그룹에 있는 모든 파일/하위 디렉터리가 그의 사용자 이름으로 변경되지만 "docker" 그룹의 모든 파일/하위 디렉터리는 여전히 "docker"로 유지되도록 그의 홈 디렉터리에서 이것을 재귀적으로 실행하려면 어떻게 해야 chgrp
합니까?
답변1
대상 홈 디렉토리부터 시작하여 find
그룹이 소유한 모든 항목을 제외하는 데 사용됩니다 .docker
find . ! -group docker -exec chgrp newgroup {} +
newgroup
적절하게 교체하십시오.
또는 팀이 소유한 모든 것을 찾으세요.
find . -group oldgroup -exec chgrp newgroup {} +
교체는 이용 가능 여부에 oldgroup
따라 달라질 수 있습니다 newgroup
.
답변2
(...)를 재귀적으로 실행하여 각 (...)의 파일/하위 디렉터리가 (...)가 되도록 하는 방법
이에 대한 일반적인 대답은 다음과 같습니다.find
또는zsh 전역 변수. 이들 중 하나를 사용하여 영향을 미치려는 파일과 chgrp
해당 파일로 수행할 작업을 이미 알고 있는 항목을 열거합니다(find 또는 zsh가 재귀를 처리하므로 재귀 모드가 아님).
find /home/new-user/some-files -group pacoverflow -exec chgrp new-user {} +
또는 zsh를 사용하는 경우:
chgrp new-user /home/new-user/some-files/**/*(g:pacoverflow:)
zsh 솔루션은 명령줄 길이 제한에 직면할 수 있으며, 이 경우 다음을 사용할 수 있습니다.재그( xargs
또는 와 유사 find
)-exec … {} +
autoload zargs
zargs -- /home/new-user/some-files/**/*(g:pacoverflow:) -- chgrp new-user
zmodload -m -F zsh/files b:zf_\*
zf_chgrp new-user /home/new-user/some-files/**/*(g:pacoverflow:)