pac*_*low 6 directory recursive group files chgrp
我刚刚将我的主目录中的所有文件/子目录复制到另一个用户的主目录中。
然后我对他的主目录进行了递归chown
,以便他成为所有文件/子目录的所有者。
我需要做的最后一件事是chgrp
对他的主目录进行递归,以便他的用户名将是他所有文件/子目录的组,而不是我的用户名。
问题是有几个子目录的组是“docker”。在这些子目录中,有一些文件/目录的组是我的用户名,还有一些文件/目录的组是“docker”。
我如何chgrp
在他的主目录上递归运行,以便将我的用户名所在组的每个文件/子目录更改为他的用户名,但组为“docker”的每个文件/子目录仍保留“docker”?
Ste*_*itt 17
用于find
排除 group 拥有的任何内容docker
;从目标主目录开始:
find . ! -group docker -exec chgrp newgroup {} +
Run Code Online (Sandbox Code Playgroud)
newgroup
酌情更换。
或者,查找您的团体拥有的任何东西:
find . -group oldgroup -exec chgrp newgroup {} +
Run Code Online (Sandbox Code Playgroud)
更换oldgroup
并newgroup
视情况而定。
\n\n如何递归运行 (\xe2\x80\xa6) 以便 (\xe2\x80\xa6) 为 (\xe2\x80\xa6) 的每个文件/子目录
\n
对此的通用答案是find
或zsh globs。使用其中之一来枚举您想要影响的文件,以及您chgrp
已经知道对这些文件执行的操作(不是在递归模式下,因为 find 或 zsh 负责递归)。
find /home/new-user/some-files -group pacoverflow -exec chgrp new-user {} +\n
Run Code Online (Sandbox Code Playgroud)\n或者,如果您使用的是 zsh:
\nchgrp new-user /home/new-user/some-files/**/*(g:pacoverflow:)\n
Run Code Online (Sandbox Code Playgroud)\nzsh 解决方案可能会遇到命令行长度限制,在这种情况下您可以使用zargs(类似于xargs
或find
\'s -exec \xe2\x80\xa6 {} +
)
autoload zargs\nzargs -- /home/new-user/some-files/**/*(g:pacoverflow:) -- chgrp new-user\n
Run Code Online (Sandbox Code Playgroud)\n\nzmodload -m -F zsh/files b:zf_\\*\nzf_chgrp new-user /home/new-user/some-files/**/*(g:pacoverflow:)\n
Run Code Online (Sandbox Code Playgroud)\n