#!/bin/bash # # Dieses Script sichert die aktuellen Linux Filesystem Berechtigungen in eine # ASCII Datei. Mit Hilfe dieser Sicherungsdatei ist es sehr schnell möglich # eine ACL Struktur ab der Sicherungsstelle wiederherzustellen. # # Die Sicherungsdateien werden zugleich gziped und mit Datum versehen. # Alte Sicherungsdateien welche älter sind als XXX Tage werden automatisch # aus dem Ziel-Dir gelöscht. Wie lange die Sicherungen aufbewahrt werden sollen # lässt sich über den Parameter RETENTIONDAYS definieren. (Default 30 tage) # # Wiederherstellung durch: cd sicherungsort ; setfacl --restore sicherungsdatei.facl # # Usage: # # backup-acls.sh /absopfad/startpunkt /absopfad/ziel/der/sicherung # z.B. backup-acls.sh /home /root/ACL-BACKUPS # # WICHTIG: DIE DIRS OHNE TRAILING SLASH ANGEBEN!! # # # Letzte Änderungen: # ======================== # 2009-07-27 A.Werner erste version # # 2009-09-24 A.Werner ADD: retention time parameter hinzugefügt # damit lässt sich definieren wie lange backup # files aufbewahrt werden sollen. # Default 90 Tage # # 2009-11-02 A.Werner FIX: cat $file | xargs > $file führt zu leerer # Datei. Separate temp Datei eingeführt. # # 2019-12-28 A.Werner CHANGE: usage Ausgabe nur noch wenn Anzahl # Argumente ungleich zwei. Bessere Fehlermeldung # wenn einer der Pfade nicht existent ist. # FIX: Script Beschreibung gefixed # FIX: Fehlerausgabe erfolgt nun auf # Fehlerkanal 2. # # # # ####################################################################### # CONFIGURE HERE ! ! ! ####################################################################### # # Enter retention time here! how long should i keep backup files before # deleting them ? # RETENTIONDAYS='30' ####################################################################### ####################################################################### function showUsage { cat >&2 << EOF $0 - ERROR - Missing arguments. Usage: $0 /path/to/startingpoint /path/to/targetdir EOF exit 1 } if [ $# -lt 2 ] ; then showUsage elif [ ! -d "$1" -o ! -d "$2" ] ; then echo "$0:ERROR: One or both arguments are not of type directory or are non existent." >&2 exit 2 fi date=`date +%F-%H%M` SOURCE="`dirname $1`/`basename $1`" DEST="`dirname $2`/`basename $2`" ############# #### Delete older files that exceed the retention time ############# OLDFILES=`mktemp` MYARGS=`mktemp` find "$DEST" -mtime +"$RETENTIONDAYS" >"$OLDFILES" #echo "DEBUG: ES WURDEN `cat $OLDFILES | wc -l` UEBERALTE FILES GEFUNDEN." if [ $(cat $OLDFILES | wc -l) -gt 0 ]; then cat $OLDFILES | xargs >"$MYARGS" rm `cat "$MYARGS"` fi # cleaning temp files rm "$OLDFILES" rm "$MYARGS" ############# filename=`echo $SOURCE | tr '/' '-'` filename="facl-backup-${filename}--${date}.facl" cd "$SOURCE" getfacl -R . > "$DEST/$filename" 2>/dev/null gzip "$DEST/$filename"