私のUbuntuサーバーには約150のシェルアカウントがあります。すべてのユーザー名はプレフィックスu12で始まります。ルートアクセス権があり、「somefiles」というディレクトリをすべてのホームディレクトリにコピーしようとしています。ディレクトリをコピーしたら、ディレクトリのユーザーとグループの所有権をユーザーの所有権に変更する必要があります。ユーザー名、グループ、およびホームディレクトリ名は同じです。これはどのように達成できますか?
答え1
ターゲットユーザーにコピーします。これにより、ターゲットファイルが自動的に生成されます。元のファイルを誰でも読むことができることを確認してください(または少なくともすべての意図したユーザーが読むことができます)。chmod
コピーしたファイルを誰もが読み取れないようにするには、後で実行します。
getent passwd |
awk -F : '$1 ~ /^u12/ {print $1}' |
while IFS= read -r user; do
su "$user" -c 'cp -Rp /original/location/somefiles ~/'
done
答え2
$ basename -a /home/* | xargs -rI{} sudo rsync -a --chown {}:{} somefiles/ /home/{}/
説明する
basename -a /home/*
すべてのユーザーのホームディレクトリを選択し、パス名を削除します。
xargs -rI{}
標準入力の各項目に対して、次のコマンドを個別に実行して、{}
項目のテキスト(この場合はユーザーディレクトリ)を置き換えます。
rsync -a --chown {}:{} somefiles/ /home/{}/
ディレクトリをsomefiles/
ユーザーのホームディレクトリにコピーし、所有者とグループをユーザー名に置き換えます。