Files
server-backup/test.sh
T
2025-03-15 01:07:57 +01:00

118 lines
3.4 KiB
Bash
Executable File

#!/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