ansible-setup-backups/templates/backup-restore.sh.j2

56 lines
1.3 KiB
Django/Jinja

#!/bin/bash
original_dir=$(pwd)
source ./vars.sh
cd "$original_dir"
./mount.sh &
RESTIC_PID=$!
MOUNT_DIR="/mnt/restic"
# Wait until the directory exists
while [ ! -d "$MOUNT_DIR" ]; do
echo "Waiting for directory to be created..."
sleep 1
done
# Wait until the directory is not empty
while [ ! "$(ls -A "$MOUNT_DIR")" ]; do
echo "Waiting for directory to have content..."
sleep 1
done
# Space-separated list of absolute paths
BACKUP_DIR="$MOUNT_DIR/snapshots/latest"
# Iterate over each path in the array
while IFS= read -r ORIGINAL_PATH; do
# Skip empty paths
[[ -z "$ORIGINAL_PATH" ]] && continue
# Construct the corresponding backup path
BACKUP_PATH="$BACKUP_DIR$ORIGINAL_PATH"
# Check if the backup directory exists
if [[ ! -d "$BACKUP_PATH" ]]; then
echo "Backup directory not found: $BACKUP_PATH"
continue
fi
# Ensure the original directory exists, create it if not
if [[ ! -d "$ORIGINAL_PATH" ]]; then
echo "Creating original directory: $ORIGINAL_PATH"
mkdir -p "$ORIGINAL_PATH"
fi
# Use rsync to copy files, preserving permissions, ownership, and timestamps
rsync --archive --acls --xattrs --compress --verbose --human-readable --partial --progress "$BACKUP_PATH/" "$ORIGINAL_PATH/"
done </backup-dirs
kill -SIGINT $RESTIC_PID
umount /mnt/restic
echo "DONE"