![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, Am Thu, 25 Sep 2003, Jan Trippler schrieb:
Am Donnerstag, 25. September 2003 00:04 schrieb Jan Trippler:
Mir sind doch noch ein paar Kleinigkeiten aufgefallen:
# alle Benutzer ermitteln getent passwd | while read pwd_entry; do # Home ermitteln HOMEDIR=`echo $pwd_entry | cut -f6 -d:` # liegt nicht in /home -> ueberspringen test `dirname $HOMEDIR` = /home || continue
Hier sollte tatsächlich auch gequotet werden, der Eintrag kann in der passwd ja leer sein und der Einfachheit halber 2 Abfragen gemacht werden: test -z "$HOMEDIR"&& continue test "`dirname $HOMEDIR`" = "/home" || continue
# User + Gruppe kann zusammen ermittelt werden USER_GROUP=`echo $pwd_entry | cut -f1,4 -d:` # Datei kopieren cp "$DATEI" $HOMEDIR # Rechte setzen chmod 750 "$HOMEDIR/`basename $DATEI`" # Eigentuemer setzen chown $USER_GROUP "$HOMEDIR/`basename $DATEI`" done
Alternativvorschlag fuer die bash/pdksh u.ae.: ==== #! /bin/bash DATEI="$1" DNAME="${DATEI##*\/}" getent passwd | cut -d: -f1,3,4,6 | while IFS=":" read name uid gid homedir; do test -n "$homedir" && test "x${homedir%\/*}" = "x/home" || continue cp "$DATEI" "$homedir" chown "$uid:$gid" "${homedir}/${DNAME}" chmod 750 "${homedir}/${DNAME}" done ==== Portabel (mehr oder weniger -- die ash schluckt's jedenfalls): ==== #! /bin/sh DATEI="$1" DNAME="`basename \"${DATEI}\"`" getent passwd | cut -d: -f1,3,4,6 | while IFS=":" read name uid gid homedir; do test -n "$homedir" && test "x`dirname \"${homedir}\"`" = "x/home" || continue cp "$DATEI" "$homedir" chown "$uid:$gid" "${homedir}/${DNAME}" chmod 750 "${homedir}/${DNAME}" done ==== Erstere Variante getestet mit den Dateinamen: ``C|N>K'', ``a b'' und ``"foo" and "bar"'' -dnh -- 21: HTML-Programmierer Grafiker (Kristian Köhntopp)