특정 그룹과 일치하는 경우 그룹을 변경하지 않고 "chgrp"를 반복적으로 실행할 수 있는 방법은 무엇입니까?

특정 그룹과 일치하는 경우 그룹을 변경하지 않고 "chgrp"를 반복적으로 실행할 수 있는 방법은 무엇입니까?

방금 내 홈 디렉터리의 모든 파일/하위 디렉터리를 다른 사용자의 홈 디렉터리로 복사했습니다.

그런 다음 나는 그의 홈 디렉토리로 재귀를 만들어 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

또는zsh는 내장 chgrp를 로드할 수 있습니다.

zmodload -m -F zsh/files b:zf_\*
zf_chgrp new-user /home/new-user/some-files/**/*(g:pacoverflow:)

관련 정보