批量交换uidNumber / gidNumber?

我们目前在Dev env中有LDAP服务器。 和分期/ prod env。 两者都不耦合,帐户是手动创build的。 所以uid是相同的,但uidNumber和gidNumber在这两个envs中是不同的。

我正在尝试升级到389 DS并设置复制,以便用户从Dev同步到Staging / Prod ldap服务器而不需要pipe理员。 但是这样做会涉及更改uidnum / gidnum,但用户ID将保持不变。 我写了一个脚本给我的用户名单冲突uidnumbers,它说我有这样的用户大约250。 样品:

amauer STG:2596 | DEV:2581 conflictID:aling aling STG:2581 | DEV:2678 conflictID:blsow bslow STG:2678 | DEV:2625 conflictID:krusso 

正如你可以看到amauer与分期uidNumber = 2596在dev中有2581。 如果我继续通过下面的脚本进行更改,那么当我对用户进行相同操作时,我会搞乱属于amauer的文件。 就在那个时候,amour和aling会有相同的uidNumber。

 cat "$chownlist" | xargs -0 sudo chown $user cat "$chgrplist" | xargs -0 sudo chown :$group sudo rm "$chownlist" "$chgrplist" 

有没有人有类似的问题,而批量更改文件的所有者/组? 某种sorting机制,会拿出一个清单

这个项目每周会给我2-3小时的额外时间,自动化是我们的职业。 🙂

有任何想法吗??

谢谢

试试这个,一步完成chown / chgrp:

 find / -uid $OLDUID -exec chown $NEWUID '{}' + find / -gid $OLDGID -exec chgrp $NEWGID '{}' + 

我find了一个这样做的方法,但看起来只会部分解决它。 冲突用户数量:250家庭主机数量:50

种子的脚本。

 amauer:2670:1010:2082:1010 aling:2082:1010:2871:1010 bslow:2871:1010:2447:1010 

脚本

  for i in `cat hosts.txt`; do for j in `cat uid-gid_seed.txt`; do user_id=`echo $j | cut -d: -f 1` old_uid=`echo $j | cut -d: -f 2` old_gid=`echo $j | cut -d: -f 3` new_uid=`echo $j | cut -d: -f 4` new_gid=`echo $j | cut -d: -f 5` echo "--------------------" echo $i echo ssh $i `sudo /usr/bin/find -path "/home/$user_id" -user $old_uid -exec chown $new_uid '{}'`; done; done