BASHから各ユーザーのホームディレクトリにファイルをコピーする方法は?

BASHから各ユーザーのホームディレクトリにファイルをコピーする方法は?

各ユーザーのホームディレクトリにファイルをコピーしようとしています。理想的には、ファイルはchown / chgrpでなければなりませんが、実際には私が要求するものではありません。私の本当の質問は、ワイルドカードを使用して各サブディレクトリを選択する方法です。

$ touch testfile
$ sudo cp testfile /home/*/

これはファイルを現在のユーザーのディレクトリに正常にコピーしますが、他のすべてのユーザーについては

cp: omitting directory '/home/user2/'
cp: omitting directory '/home/user3/'

など。ご回答ありがとうございます。

答え1

cp複数のターゲットは許可されていないため、ループを直接提供する必要があります。やりたいことと直接同等のもの

for homedir in /home/*; do sudo cp testfile "$homedir"; done

一般的な注意:ユーザー名にスペースがないと仮定し、ホームディレクトリがまったくのディレクトリであるとします/home。それ以外の場合は、ホームディレクトリの場所をから取得する必要があります/etc/passwdが、これにはシステムユーザーが含まれるため、十分に高いUIDとユーザーUIDの開始位置は分布によって異なります。

答え2

ループ内でこれを行うアイデアをいただいた@UlrichSchwarzに感謝します。心の平和を得るために一般的なファイルを上書きしていないことを確認するチェックを追加しました。

# First command-line arg is the file to be copied
for homedir in /home/* ; do 
    if [ -d "$homedir" ] ; then
         cp $1 "$homedir"
         user=$(ls -ld $homedir | awk '{print $3}')
         chown --verbose $user:$user $homedir/$1
    fi
done

これはまた、グループとユーザーの所有権を変更する「金賞受賞」の問題に対する比較的簡単なソリューションのドアを開きます。

答え3

$ ls -1 /home/ | xargs -rI{} sudo cp testfile /home/{}/

説明する

ls -1 /home/「すべてのユーザーを選択」は、すべてのユーザーのホームディレクトリを選択し、1つずつリストします。

xargs -rI{}標準入力の各項目に対して、次のコマンドを個別に実行して、{}項目のテキスト(この場合はユーザーディレクトリ)を置き換えます。

cp testfile /home/{}/ファイルをtestfileユーザーのホームディレクトリにコピーします。

関連情報