Es kann vorkommen dass man einen PC neu aufsetzt und anschließend ein Backup der Konfigurationsdateien einspielen möchte.
Dabei kann es zu dem Prolbem kommen dass am alten System die UID’s der Benutzer andere Nummern hatten als am neuen System.
In meinem Beispiel wollte ich das /etc Verzeichnis von einem Backup auf einem frisch installierten Server einspielen, aber z.B. /etc/bind hatte auf dem alten System eine andere UID.
Fertiges Tool ist mir keines bekannt gewesen und bei rsync kann man zwar genau wie bei cp die Berechtigungen mit übernehmen, allerdings habe ich keinen Schalter gefunden der lediglich die Berechtigungen übernimmt.
Also musste die Bash wieder mal herhalten 🙂
Das copy_permission.sh Script sieht wie folgt aus:
#!/bin/bash
if [ ! „$1“ ]; then
echo „Bitte Original-Verzeichnis angeben“
exit
else
if [ ! -d „$1“ ]; then
echo „Original-Verzeichnis existiert nicht!“
exit
fi
DIRVON=$1
fiif [ ! „$2“ ]; then
echo „Bitte Ziel-Verzeichnis angeben“
exit
else
if [ ! -d „$2“ ]; then
echo „Ziel-Verzeichnis existiert nicht!“
exit
fi
DIRNACH=$2
ficd $DIRVON
for F in $(find . -print); do
OCT=$(stat „$F“|sed -n -e 4p|cut -f2 -d“ „|cut -b 2-5)
BENUTZER=$(stat „$F“|sed -n -e 4p|cut -b40-47|sed -e „s/ //g“)
GRUPPE=$(stat „$F“|sed -n -e 4p|cut -b64-71|sed -e „s/ //g“)chmod $OCT „$DIRNACH/$F“
chown $BENUTZER:$GRUPPE „$DIRNACH/$F“done
Ein einfacher Aufruf von „copy_permission.sh /etc /tmp/etc“ übernimmt alle Benutzer und Berechtigungen aus dem /etc Verzeichnis und überträgt sie nach /tmp/etc.
Das Ding ist sicher nicht perfekt, für mich hat’s aber funktioniert – quick and dirty also 🙂