我正在尝试将文件复制到每个用户的主目录。理想情况下,该文件应该是 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
到用户的主目录。