95 lines
3.6 KiB
Bash
Executable file
95 lines
3.6 KiB
Bash
Executable file
#!/bin/sh
|
|
# this script removes all data of the specified user and puts the data
|
|
# of a template user in his directory.
|
|
# All files of this template user will be scanned for the name of the
|
|
# template user (case sensitivly) and every occourence will be replaced
|
|
# by the name of the new user.
|
|
# Furthermore every filename that includes the name of the template user
|
|
# will be renamed to contain the name of the new user.
|
|
# Finally all links, that contain the name of the template user will be
|
|
# renamed to according to the new username.
|
|
# This can help to create new users according to a template.
|
|
#
|
|
# how to use it:
|
|
# 1) create a template user (with a long and unusual name, that would not
|
|
# occour within text or filenames by coincidence)
|
|
# 2) adapt all settings of this template user to your needs (proxies, Desktop, ...)
|
|
# 3) create a new real user with the tool of your choice (adduser, yast, ...)
|
|
# 4) run the script - e.g. "convert-user.sh --yes-remove-user-data NEW_USER"
|
|
# 5) done!
|
|
#
|
|
# for every new user you should repeat steps 3 to 5
|
|
#
|
|
# BEWARE: all files of every new user will be DELETED without further warning!!!
|
|
#
|
|
# whoever wants to translate the error messages: just do it!
|
|
#
|
|
|
|
|
|
set -ue
|
|
|
|
HOME_DIR=/home
|
|
MUSTER=musternutzer
|
|
|
|
### funktionen ###
|
|
|
|
abbruch()
|
|
{
|
|
echo "Fehler: $2"
|
|
exit $1
|
|
}
|
|
|
|
# pruefen, ob die Anzahl der Parameter passt
|
|
[ $# -ne 2 ] && abbruch 1 "Als Parameter ist die Option '--yes-remove-user-data' und der Name des zu konvertierenden (existierenden) Nutzers erforderlich!"
|
|
|
|
# pruefen, ob der erste Parameter "--yes-remove-user-data" ist
|
|
[ "$1" != "--yes-remove-user-data" ] && abbruch 2 "Als Parameter ist die Option '--yes-remove-user-data' und der Name des zu konvertierenden (existierenden) Nutzers erforderlich!"
|
|
NEU="$2"
|
|
|
|
[ -z "$NEU" ] && abbruch 10 "Der neue Nutzername ist leer"
|
|
|
|
[ -d "$HOME_DIR/$MUSTER" ] || abbruch 3 "der Musternutzer ($MUSTER) existiert nicht!"
|
|
|
|
[ -d "$HOME_DIR/$NEU" ] || abbruch 4 "der zu konvertierende Nutzer ($NEU) existiert nicht!"
|
|
|
|
[ "$NEU" != "`basename $NEU`" ] && abbruch 5 "der zu konvertierende Nutzername ($NEU) ist ungueltig!"
|
|
|
|
#echo "Letzte Chance zum Abbruch (STRG-C) ..."
|
|
#echo "Enter zum Fortfahren ..."
|
|
#read
|
|
|
|
echo "Entferne die alten Nutzerdaten ..."
|
|
find "$HOME_DIR/$NEU" -mindepth 1 -maxdepth 1 -xdev | while read a
|
|
do rm -rf "$a"
|
|
done || abbruch 6 "das alte Nutzerverzeichnis konnte nicht geloescht werden!"
|
|
|
|
echo "Kopiere die Daten des Musternutzers ..."
|
|
cp -a "$HOME_DIR/$MUSTER/." "$HOME_DIR/$NEU" || abbruch 7 "die Dateien des Musternutzers konnten nicht kopiert werden!"
|
|
|
|
echo "Passe die Daten des Musternutzers an ..."
|
|
find "$HOME_DIR/$NEU" -type f | while read a
|
|
do sed -i "s/$MUSTER/$NEU/g" "$a" || abbruch 8 "die Anpassung der Datei $a schlug fehl!"
|
|
done
|
|
|
|
echo "Passe die Links an, deren Ziele den Nutzernamen enthalten ..."
|
|
find "$HOME_DIR/$NEU" -type l | while read a
|
|
do ZIEL=`readlink "$a"`
|
|
ZIEL_SUBST=`echo "$ZIEL" | sed "s/$MUSTER/$NEU/g"`
|
|
[ "$ZIEL" != "$ZIEL_SUBST" ] && ln -sfn "$ZIEL_SUBST" "$a"
|
|
done
|
|
|
|
echo "Passe Dateinamen an, die den Nutzernamen beinhalten ..."
|
|
find "$HOME_DIR/$NEU" | while read a
|
|
do NAME=`basename "$a"`
|
|
NAME_SUBST=`echo "$NAME" | sed "s/$MUSTER/$NEU/g"`
|
|
[ "$NAME" != "$NAME_SUBST" ] && mv "$a" "`dirname \"$a\"`/$NAME_SUBST"
|
|
done
|
|
|
|
USER_INFO=`ls -ldn "$HOME_DIR/$NEU" | cut -d " " -f 4,5 | sed 's/ /./'`
|
|
#echo "Neuer Besitzer wird sein: $USER_INFO"
|
|
|
|
if [ "$(id -u)" = "0" ]
|
|
then chown -R "$USER_INFO" "$HOME_DIR/$NEU" || abbruch 9 "der Nutzer ($NEU) konnte nicht als Eigentuemer seines Home-Verzeichnisses gesetzt werden!"
|
|
else echo
|
|
echo "Nun muessen die Dateien noch dem neuen Benutzer uebergeben werden ..."
|
|
fi
|