如何将文件复制到 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/select all users' 选择所有用户的主目录,将其逐一列出。

xargs -rI{}对标准输入上的每个条目单独执行以下命令,并替换{}为条目的文本(在我们的例子中为用户目录)。

cp testfile /home/{}/将您的文件复制testfile到用户的主目录。

相关内容