.desktop
要在我使用的所有用户桌面上复制文件
ls -1 /home/ | while read line ; do cp ~/baz.desktop /home/$line/baz.desktop ; done
,我有一种感觉,有更优雅的方法来实现这一点。
干杯,
习
答案1
根据您的用户的精明程度,您可能希望他们复制文件而不是强制将文件添加到他们的帐户中,或者您可能希望集中安装它正如 mariaczi 在评论中所建议的。
如果我理解正确的话,该文件需要复制到每个用户的主目录。我假设您以 root 身份执行此操作。操作完成后,我假设副本不仅必须驻留在每个用户的主目录中,而且还应该由该用户拥有并属于users
权限为 0644 的组。
这可以通过循环来完成install
(假设主目录位于 下/home
)。该install
实用程序的工作原理有点像,cp
但允许一次性设置用户和组所有权以及权限。
for homedir in /home/*/; do
user=${homedir%/} # remove '/' from end of $homedir
user=${user#/home} # remove '/home' from start of $user
install -b -o "$user" -g users -m 644 ~/baz.desktop "$homedir"
done
install -b
如果文件已存在,将在目标上创建该文件的备份。或者,如果文件已经存在,您可以完全跳过安装:
for homedir in /home/*/; do
if [ ! -e "$homedir/baz.desktop" ]; then
user=${homedir%/} # remove '/' from end of $homedir
user=${user#/home} # remove '/home' from start of $user
install -o "$user" -g users -m 644 ~/baz.desktop "$homedir"
fi
done
有关的:
- 为什么*不*解析`ls`?
install
您的系统的手册。
答案2
正如评论中所建议的,您可以通过将快捷方式复制到 来在系统中全局安装该快捷方式/usr/local/share/applications/
。如果由于某种原因您仍然喜欢将其复制到每个用户的主目录,那么这是您正在寻找的优雅方式:
$ ls -1 /home/ | xargs -rI{} sudo cp ~/baz.desktop /home/{}/
解释
ls -1 /home/
选择所有用户的主目录,将其逐一列出。
xargs -rI{}
对标准输入上的每个条目单独执行以下命令,并替换{}
为条目的文本(在我们的例子中为用户目录)。
cp ~/baz.desktop /home/{}/
将 ~/baz.desktop 复制到用户的主目录。
答案3
ls /home/ | xargs -rI{} sudo cp /usr/share/applications/sol.desktop /home/{}/Desktop
此版本将 sol.desktop 从其默认位置复制到主目录中列出的所有用户。