#!/usr/bin/env bash RUN_DIR=/var/docker BACKUP_DIR=vol SOURCE=nextcloud TARGET_DIR=/var/docker/tmp PASSPHRASE=1234567890 RESTORE=vol/nextcloud/data/data/nextcloud.log # Ist $1 in der Liste der restlichen args $2, $3 ... # # zB. if is_in "foo" "foo" "bar" "foo bar" ; then ... # Leere Liste liefert immer false # function is_in { local search="$1" shift 1 local e for e in "$@"; do [[ "$e" == "$search" ]] && return 0; done return 1 } # alle Verzechnisnamen in einem Verzeichnis holen # # $1 - Verzeichnis in dem gesucht wird als absoluter Pfad # $2 ff. - auszuschliessende Verzeichnisse (kann leer bleiben) # function iterate_dirs_in() { local dirname local root=$1 shift 1 for dir in $(find "$root" -maxdepth 1 -type d \! -wholename "$root"); do dirname=$(basename $dir) if ! is_in "$dirname" "$@"; then echo "$dirname" fi done } # Verzeichnise in .tgz.gpg-Dateien sichern # # $1 - Verzeichnis unterhalb dessen gesichert werden soll, das also nicht Teil des gespeicherten Pfads wird (z.B /var/docker) # $2 - Verzeichnis, das gesichert wird: alle Verzeichnisse darunter werden einzeln als .tgz.gpg-Datei gesichert (z.B vol -> apache.tgz.gpg, etc.) # $3 - Zielverzeichnis für .tgz.gpg-Dateien # $4 ff. - Verzeichnisse, die nicht gesichert werden sollen (kann leer bleiben) # function backup_dir() { local root=$1 local source=$2 local target=$3 local dir shift 3 cd "$root" for dir in $(iterate_dirs_in "$root/$source" "$@"); do sudo tar -c -z --numeric-owner --one-file-system "$source/$dir" | sudo gpg --batch -c --passphrase $PASSPHRASE -o "$target/$dir.tgz.gpg" done } #for dir in $(find "$RUN_DIR/$BACKUP_DIR" -maxdepth 1 -type d \! -wholename "$RUN_DIR/$BACKUP_DIR"); do # testfn "$dir -> $(basename $dir)" #done echo "-----------------------" date echo "-----------------------" backup_dir "$RUN_DIR" "$BACKUP_DIR" "$TARGET_DIR" echo "-----------------------" date echo "-----------------------" exit date +%H:%M:%S.%N echo "--- tar -c ------------------------------------------------" cd $RUN_DIR sudo tar -c -z --numeric-owner --one-file-system -f "$TARGET_DIR/$SOURCE.tar.gz" "$BACKUP_DIR/$SOURCE" date +%H:%M:%S.%N echo "--- tar -t ------------------------------------------------" cd $TARGET_DIR sudo tar -t -f "$TARGET_DIR/$SOURCE.tar.gz" | sudo tee tar_list.txt >/dev/null date +%H:%M:%S.%N echo "--- tar -x ------------------------------------------------" sudo tar -xv -f "$TARGET_DIR/$SOURCE.tar.gz" $RESTORE >/dev/null date +%H:%M:%S.%N TARGET_DIR=/var/docker/tmp/two echo "#" echo "### gpg ###################################################" echo "#" date +%H:%M:%S.%N echo "--- tar -c ------------------------------------------------" cd $RUN_DIR sudo tar -c -z --numeric-owner --one-file-system "$BACKUP_DIR/$SOURCE" | sudo gpg --batch -c --passphrase $PASSPHRASE -o "$TARGET_DIR/$SOURCE.tgz.gpg" date +%H:%M:%S.%N echo "--- tar -t ------------------------------------------------" cd $TARGET_DIR sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$TARGET_DIR/$SOURCE.tgz.gpg" 2>/dev/null | sudo tar -tz | sudo tee tar_list.txt >/dev/null date +%H:%M:%S.%N echo "--- tar -x ------------------------------------------------" sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$TARGET_DIR/$SOURCE.tgz.gpg" 2>/dev/null | sudo tar -xzv $RESTORE >/dev/null date +%H:%M:%S.%N