Bash:将文件复制到所有主目录

时间:2014-08-11 20:13:51

标签: bash file copy home-directory

我必须将文件复制(如果已存在,则覆盖)同一组用户(“学生”)的所有主目录。

我发现了一个脚本,我试图适应我的上下文(我有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

我一无所获。

我错的地方?

提前致谢

3 个答案:

答案 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