Sorry falls das mail ein zweites Mal ankommt - das erste habe ich nicht bekommen :-( Hallo, ein selbst gestricktes Script "kopieren.sh" soll in sämtliche Homeverzeichnisse eine Datei kopieren und die Rechte anpassen. Dabei muss ich momentan das Script folgendermaßen aufrufen, damit es läuft: ./kopieren.sh `ls -Al /home |tail -n +2 |awk -F' ' '{print $3"."$4"."$8}'` Das Script lautet folgendermaßen: #!/bin/sh DATEI=/pfad/zur/datei for USER_GROUP in "$@"; do USER=`echo $USER_GROUP|awk -F. '{print $1}'` GROUP=`echo $USER_GROUP|awk -F. '{print $2}'` USERNAME=`echo $USER_GROUP|awk -F. '{print $3}'` cp $DATEI /home/$USERNAME/ chmod 750 /home/$USERNAME/`basename $DATEI` chown $USER.$GROUP /home/$USERNAME/`basename $DATEI` done Kann mir jemand sagen, wie ich dieses Scipt ändern müsste, dass dieses Script immer _ohne_ diesen `ls ...`-Befehl aufgerufen werden kann? Viele Grüße Dieter
Am Donnerstag, 25. September 2003 00:04 schrieb Dieter Kroemer:
Sorry falls das mail ein zweites Mal ankommt - das erste habe ich nicht bekommen :-(
Antworte ich eben auf die hier ;) Die andere kam aber auch an.
ein selbst gestricktes Script "kopieren.sh" soll in sämtliche Homeverzeichnisse eine Datei kopieren und die Rechte anpassen. Dabei muss ich momentan das Script folgendermaßen aufrufen, damit es läuft:
./kopieren.sh `ls -Al /home |tail -n +2 |awk -F' ' '{print $3"."$4"."$8}'`
Das ist ziemlich umständlich. Warum beschränkst Du Dich nicht gleich auf Verzeichnisse?
Das Script lautet folgendermaßen:
#!/bin/sh
DATEI=/pfad/zur/datei
for USER_GROUP in "$@"; do USER=`echo $USER_GROUP|awk -F. '{print $1}'` GROUP=`echo $USER_GROUP|awk -F. '{print $2}'` USERNAME=`echo $USER_GROUP|awk -F. '{print $3}'`
BTW: Du ermittelst den Namen des Homeverzeichnisses extra? Stimmt der nicht mit den Benutzernamen überein?
cp $DATEI /home/$USERNAME/ chmod 750 /home/$USERNAME/`basename $DATEI` chown $USER.$GROUP /home/$USERNAME/`basename $DATEI` done
Kann mir jemand sagen, wie ich dieses Scipt ändern müsste, dass dieses Script immer _ohne_ diesen `ls ...`-Befehl aufgerufen werden kann?
Du baust einfach eine Schleife drum rum. Ich würde die aber (s. o.) gleich anders aufsetzen (in diesem Fall lasse ich mal die "" um die Variablen weg - Usernamen mit Leerzeichen sollten eher die Ausnahme sein ;), allerdings sollte man DATEI vorsichtshalber so einkleiden: # 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 # User + Gruppe 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 Jan
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
Jan
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)
Am Donnerstag, 25. September 2003 00:04 schrieb Jan Trippler:
Antworte ich eben auf die hier ;) Die andere kam aber auch an.
Bei mir auch ... aber ich habe einen Filter angelegt, der aus Versehen auch diese Mails in den Mülleimer geworfen hat - habe ich erst jetzt bemerkt.
# alle Benutzer ermitteln getent passwd | while read pwd_entry; do
... Problem dabei - die User sind mit ldap angelegt ... Aber egal, ich habe halt jetzt eine quick 'n dirty Lösung: Das kopieren-Script ruf ich mit einem Extra-"Script" auf, in dem dieser längliche Ausdruck steht. Vielen Dank für deine ausführliche Hilfe :-))) Dieter
participants (3)
-
David Haller
-
Dieter Kroemer
-
Jan.Trippler@t-online.de