80 lines
1.9 KiB
Bash
Executable File
80 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Incremental backup of data files to Google Drive using rclone.
|
|
# Copies only new/changed files and never deletes remote files.
|
|
#
|
|
# Usage:
|
|
# scripts/ops/netgescon-data-backup-incremental-gdrive.sh \
|
|
# --source /var/www/netgescon/storage/app/amministratori \
|
|
# --remote gdrive:NetGesconBackups/prod/data-incremental
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
ENV_FILE="${ENV_FILE:-$ROOT_DIR/docker/.env.multisite}"
|
|
SOURCE_DIR=""
|
|
REMOTE_PATH=""
|
|
|
|
load_env_file() {
|
|
local env_file="$1"
|
|
local line key value
|
|
|
|
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
line="${line%$'\r'}"
|
|
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
|
|
[[ "$line" != *=* ]] && continue
|
|
|
|
key="${line%%=*}"
|
|
value="${line#*=}"
|
|
export "$key=$value"
|
|
done < "$env_file"
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--source)
|
|
SOURCE_DIR="$2"
|
|
shift 2
|
|
;;
|
|
--remote)
|
|
REMOTE_PATH="$2"
|
|
shift 2
|
|
;;
|
|
--env-file)
|
|
ENV_FILE="$2"
|
|
shift 2
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Usage: $0 [--source <dir>] [--remote <rclone-remote:path>] [--env-file <path>]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
load_env_file "$ENV_FILE"
|
|
fi
|
|
|
|
SOURCE_DIR="${SOURCE_DIR:-${NETGESCON_ARCHIVE_GDRIVE_SOURCE:-${PROD_STORAGE_PATH:-/srv/netgescon/prod/storage}/app/amministratori}}"
|
|
REMOTE_PATH="${REMOTE_PATH:-${NETGESCON_ARCHIVE_GDRIVE_REMOTE:-gdrive:NetGesconBackups/prod/documenti-amministratori}}"
|
|
|
|
if ! command -v rclone >/dev/null 2>&1; then
|
|
echo "Error: rclone not installed."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d "$SOURCE_DIR" ]]; then
|
|
echo "Error: source directory not found: $SOURCE_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
rclone copy "$SOURCE_DIR" "$REMOTE_PATH" \
|
|
--update \
|
|
--checksum \
|
|
--create-empty-src-dirs \
|
|
--progress
|
|
|
|
echo "Incremental data backup completed."
|
|
echo "SOURCE=$SOURCE_DIR"
|
|
echo "REMOTE=$REMOTE_PATH"
|