first steps with command line args

This commit is contained in:
Hartmut Bauer committed 2025-03-19 01:16:52 +01:00
1 parent 6d69da50bc
commit a167c603cd
1 file changed
+44 -26
+44 -26
View File
@@ -34,7 +34,7 @@ log() {
# zB. if is_in "foo" "foo" "bar" "foo bar" ; then ... # zB. if is_in "foo" "foo" "bar" "foo bar" ; then ...
# Leere Liste liefert immer false # Leere Liste liefert immer false
# #
function is_in { is_in() {
local search="$1" local search="$1"
shift 1 shift 1
local e local e
@@ -47,7 +47,7 @@ function is_in {
# $1 - Verzeichnis in dem gesucht wird als absoluter Pfad # $1 - Verzeichnis in dem gesucht wird als absoluter Pfad
# $2 ff. - auszuschliessende Verzeichnisse (kann leer bleiben) # $2 ff. - auszuschliessende Verzeichnisse (kann leer bleiben)
# #
function iterate_dirs_in() { iterate_dirs_in() {
local dirname local dirname
local root=$1 local root=$1
shift 1 shift 1
@@ -63,7 +63,7 @@ function iterate_dirs_in() {
# #
# $1 - dir to check # $1 - dir to check
# #
function check_directory() { check_directory() {
local dir=$1 local dir=$1
if [ -d "$1" ]; then if [ -d "$1" ]; then
return 0 return 0
@@ -82,7 +82,7 @@ function check_directory() {
# #
# $1 - zu löschendes Verzeichnis # $1 - zu löschendes Verzeichnis
# #
function delete_dir() { delete_dir() {
local dir=$1 local dir=$1
sudo rm -rf "$dir" && return 0 sudo rm -rf "$dir" && return 0
log ERROR "### could not delete directory $1!" log ERROR "### could not delete directory $1!"
@@ -93,7 +93,7 @@ function delete_dir() {
# Slashes "/" im Pfadnamen durch Dashes "-" ersetzen, so dass der String als Dateiname verwendet werden kann. # Slashes "/" im Pfadnamen durch Dashes "-" ersetzen, so dass der String als Dateiname verwendet werden kann.
# #
# $1 - path # $1 - path
function backup_file_prefix() { backup_file_prefix() {
echo "$1" | sed -E 's/^\///' | sed -E 's/\//-/g' echo "$1" | sed -E 's/^\///' | sed -E 's/\//-/g'
} }
@@ -103,7 +103,7 @@ function backup_file_prefix() {
# $2 - Zielverzeichnis für .tgz.gpg-Dateien # $2 - Zielverzeichnis für .tgz.gpg-Dateien
# $3 ff. - Verzeichnisse, die nicht gesichert werden sollen (kann leer bleiben) # $3 ff. - Verzeichnisse, die nicht gesichert werden sollen (kann leer bleiben)
# #
function backup_all_dirs() { backup_all_dirs() {
local root=$1 local root=$1
local target=$2 local target=$2
local prefix=$(backup_file_prefix $root) local prefix=$(backup_file_prefix $root)
@@ -114,7 +114,7 @@ function backup_all_dirs() {
for dir in $(iterate_dirs_in "$root" "$@"); do for dir in $(iterate_dirs_in "$root" "$@"); do
tar_file="$target/$prefix-$dir.$EXT" tar_file="$target/$prefix-$dir.$EXT"
backup_dir "$root" "$tar_file" "$dir" backup_dir "$root" "$tar_file" "$dir"
list "$tar_file" "$dir" create_list "$tar_file" "$dir"
test_integrity "$tar_file" test_integrity "$tar_file"
done done
} }
@@ -125,7 +125,7 @@ function backup_all_dirs() {
# $2 - Zielpfad und -name für das Archiv # $2 - Zielpfad und -name für das Archiv
# $2 - zu sicherndes Verzeichnis # $2 - zu sicherndes Verzeichnis
# #
function backup_dir() { backup_dir() {
local root=$1 local root=$1
local archive=$2 local archive=$2
local dir=$3 local dir=$3
@@ -143,7 +143,7 @@ function backup_dir() {
# #
# $1 - Archiv # $1 - Archiv
# #
function list() { create_list() {
local archive=$1 local archive=$1
log INFO "--- List $archive" log INFO "--- List $archive"
sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" | sudo tar -tzv | sudo tee $archive.txt >/dev/null sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" | sudo tar -tzv | sudo tee $archive.txt >/dev/null
@@ -160,7 +160,7 @@ function list() {
# #
# $1 - Archiv # $1 - Archiv
# #
function test_integrity() { test_integrity() {
local archive=$1 local archive=$1
log INFO "--- Check integrity of $archive" log INFO "--- Check integrity of $archive"
sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" | sudo tar -xzO >/dev/null sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" | sudo tar -xzO >/dev/null
@@ -179,7 +179,7 @@ function test_integrity() {
# $1 - Archiv, ggf. mit Pfad # $1 - Archiv, ggf. mit Pfad
# $2 ff. - zurückzusichernde Dateien/Verzeichnisse # $2 ff. - zurückzusichernde Dateien/Verzeichnisse
# #
function restore() { restore() {
local archive=$1 local archive=$1
shift 1 shift 1
sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" | sudo tar -xzv $@ >/dev/null sudo gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" | sudo tar -xzv $@ >/dev/null
@@ -191,9 +191,25 @@ function restore() {
fi fi
} }
# Liste der Archives auf stdout ausgeben
#
# Zeigt alle Archive incl. des letzten Verzeichnisses an
#
# z.B.
# backup.7/volume1-data-Web.tgz.gpg
# media/volume1-media-books.tgz.gpg
#
# $1 - root path i.d.R. ein Verzeichnis oberhalb, damit alle täglichen Backups angezeigt werden
#
list_archives() {
local target=$1
local targ=${target//\//\\\/} # slashes escapen
echo "#$targ#"
sudo find "$target" -type f -name "*.gpg" | sed -E "s/^$targ//"
}
# *** NAS Test *** # *** NAS Test ***
function nas_test() { nas_test() {
LOG_FILE="/volume1/nfs/Server/tmp/backup.log" LOG_FILE="/volume1/nfs/Server/tmp/backup.log"
log INFO "*** *** Begin NAS backup (data, nfs, media/books, media/music)" log INFO "*** *** Begin NAS backup (data, nfs, media/books, media/music)"
@@ -208,22 +224,26 @@ function nas_test() {
# nfs # nfs
backup_all_dirs "/volume1/nfs" "$TARGET_DIR" "${EXCLUDE_DIRS[@]}" backup_all_dirs "/volume1/nfs" "$TARGET_DIR" "${EXCLUDE_DIRS[@]}"
TARGET_DIR="/volume1/nfs/backups/tmp/media" BACKUP_ROOT=/volume1/nfs/backups/tmp
TARGET_DIR="$BACKUP_ROOT/media"
EXCLUDE_DIRS=("@eaDir" "Temporary Items" "lost+found" serien tmp video "video.archive") EXCLUDE_DIRS=("@eaDir" "Temporary Items" "lost+found" serien tmp video "video.archive")
check_directory $TARGET_DIR check_directory $TARGET_DIR
# media/books media/music # media/books media/music
backup_all_dirs "/volume1/media" "$TARGET_DIR" "${EXCLUDE_DIRS[@]}" backup_all_dirs "/volume1/media" "$TARGET_DIR" "${EXCLUDE_DIRS[@]}"
log INFO "*** End of NAS backuip" log INFO "*** End of NAS backup"
list_archives $BACKUP_ROOT
} }
# *** NATHAN Test *** # *** NATHAN Test ***
function nathan_test() { nathan_test() {
LOG_FILE=/var/docker/tmp/backup.log LOG_FILE=/var/docker/tmp/backup.log
log INFO "*** *** Begin nathan server backup" log INFO "*** *** Begin nathan server backup"
TARGET_DIR=/var/docker/tmp/backup.$DAY BACKUP_ROOT=/var/docker/tmp
TARGET_DIR="$BACKUP_ROOT/backup.$DAY"
delete_dir $TARGET_DIR delete_dir $TARGET_DIR
check_directory $TARGET_DIR check_directory $TARGET_DIR
@@ -232,14 +252,17 @@ function nathan_test() {
backup_all_dirs "/var/docker/vol" "$TARGET_DIR" backup_all_dirs "/var/docker/vol" "$TARGET_DIR"
log INFO "*** End of nathan server backup" log INFO "*** End of nathan server backup"
list_archives $BACKUP_ROOT
} }
# *** HANILLER Test *** # *** HANILLER Test ***
function hamiller_test() { hamiller_test() {
LOG_FILE=/var/docker/tmp/backup.log LOG_FILE=/var/docker/tmp/backup.log
log INFO "*** *** Begin hamiller server backup" log INFO "*** *** Begin hamiller server backup"
TARGET_DIR=/var/docker/tmp/backup.$DAY BACKUP_ROOT=/var/docker/tmp
TARGET_DIR="$BACKUP_ROOT/backup.$DAY"
delete_dir $TARGET_DIR delete_dir $TARGET_DIR
check_directory $TARGET_DIR check_directory $TARGET_DIR
@@ -248,9 +271,10 @@ function hamiller_test() {
# backup_all_dirs "/var/docker/vol" "$TARGET_DIR" # backup_all_dirs "/var/docker/vol" "$TARGET_DIR"
log INFO "*** End of hamiller server backup" log INFO "*** End of hamiller server backup"
list_archives $BACKUP_ROOT
} }
function test() { test() {
#LOG_FILE=./t1.log #LOG_FILE=./t1.log
#log INFO "error test" #log INFO "error test"
echo "host: #$1#" echo "host: #$1#"
@@ -261,13 +285,7 @@ function test() {
#hamiller_test #hamiller_test
#test1 #test1
test "$HOSTNAME" list_archives /var/docker/tmp
if [ ! -z $ERROR ]; then
log ERROR "*** *** Errors occured during the progem run, see full log for details."
else
log INFO "*** *** Program ended successfully."
fi
exit exit