我必须将文件复制(如果已存在,则覆盖)同一组用户(“学生”)的所有主目录。
我发现了一个脚本,我试图适应我的上下文(我有LDAP用户而不是/ etc / passwd所以我使用getent passwd来获取用户名)。
这是脚本(cp2stud.sh):
#!/bin/bash
# subdirectory of /home/uid
DIR=".eclipse/org.eclipse.platform_3.8_155965261/configuration"
# the file to copy
FILE="/home/admin/tmp/config.ini"
# location of home dirs
UHOME="/home"
# GID of "students" group
USERS_GID=10004
# get list of users having same GID
_USERS="$(getent passwd | awk -F ':' '{if ( $4 == $USERS_GID ) print $1 }')"
for u in $_USERS
do
_dir="${UHOME}/${u}/${DIR}"
if [ -d "$_dir" ]
then
yes | /bin/cp -v "$FILE" "$_dir"
chown $(id -un $u):students "$_dir/${FILE}"
fi
done
当我尝试启动时:
$ sudo cp2stud.sh
我一无所获。
我错的地方?
提前致谢
答案 0 :(得分:1)
_USERS="$(getent passwd | awk -v X="$USERS_GID" -F ':' '{if ( $4 == X ) print $1 }')"
答案 1 :(得分:0)
尝试这种方法:
...
export USERS_GID=10004
_USERS=$(getent passwd | awk -F ':' '{if ( $4 == ENVIRON["USERS_GID"] ) print $1 }')
...
您也可以这样做:
...
USERS_GID=10004
_USERS=$(getent passwd | awk -F ':' -v gid=$USERS_GID '{if ( $4 == gid ) print $1 }')
...
或者只是:
...
_USERS=$(getent passwd | awk -F ':' -v gid=10004 '{if ( $4 == gid ) print $1 }')
...
答案 2 :(得分:0)
以下代码有效:
DIR=".eclipse/org.eclipse.platform_3.8_155965261/configuration"
FILE="/home/admin/tmp/config.ini"
UHOME="/home"
USERS_GID=10004
GRP_NAME=students
FILENAME=$(basename $FILE)
_USERS="$(getent passwd | awk -v X="$USERS_GID" -F ':' '{if ( $4 == X ) print $1 }')"
for u in $_USERS
do
_dir="${UHOME}/${u}/${DIR}"
if [ -d "$_dir" ]
then
yes | /bin/cp -v "$FILE" "$_dir"
chown -v $(id -un $u):$GRP_NAME "${UHOME}/${u}/${DIR}${FILENAME}"
fi
done