私のホームディレクトリのすべてのファイル/サブディレクトリを他のユーザーのホームディレクトリにコピーしました。
それから私は彼のホームディレクトリに再帰し、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:)