我想用/etc/skel
Debian 和 Ubuntu 安装上的新内容“更新”老用户。编写脚本是可能的...
find /home -maxdepth 1 -mindepth 1 -type d | while read homedir; do
user="$(stat -c%U $homedir)"
su -c 'tar -cf- -C /etc/skel . | tar -vxf- -C $HOME' $user
done
...但我想知道是否有人知道更好的方法。
答案1
您可以/etc/skel
使用这样的脚本更新用户目录中的文件。
#!/bin/sh
#
getent passwd |
while IFS=: read -r username x uid gid gecos home shell
do
if [ ! -d "$home" ] || [ "$username" == 'root' ] ## || [ "$uid" -lt 1000 ]
then
continue
fi
tar -cf - -C /etc/skel . | sudo -Hu "$username" tar --skip-old-files -xf -
done
笔记
- 它故意不会更新已存在的文件,但它无法识别用户已删除但您想要再次放回的文件,以便重新创建这些文件
- 它根本不会更新
root
的文件 - 如果您也想排除 UID <1000 的系统帐户,
##
请将删除if ...conditions...
如果您有可用的原始文件,另一种方法可能是当且仅当用户的文件未更改时更新它们,否则将它们一起安装(很像 Debian 的*.dpkg-dist
方法)。但这需要与使用不同的方法tar
。
答案2
对于使用 FreeBSD 发现这个问题的人,命令
密码用户模式用户-m
将会做到这一点。请注意,您还可以选择不同的骨架目录作为此命令的一部分。-k dir