#!/bin/bash log() { echo "[$(date '+%F %T')] $*" } fail() { log "❌ $*" exit 1 } upload() { local SRC=$1 local DEST=$2 log "☁️ Upload: $SRC → $DEST" rclone copy "$SRC" "$DEST" \ --transfers=2 \ --checkers=4 \ --retries=5 \ --low-level-retries=10 \ --progress \ || fail "Upload fehlgeschlagen: $SRC" } # ----------------------------- # Alte Backups behalten, nur X bleiben # ----------------------------- cleanup_keep_latest() { local REMOTE_PATH=$1 local KEEP_COUNT=$2 log "🧹 Prüfe alte Backups auf $REMOTE_PATH, behalte nur die letzten $KEEP_COUNT..." # Liste aller Backups, älteste zuerst local BACKUPS BACKUPS=$(rclone lsf "$REMOTE_PATH" --dirs-only --max-depth 1 | sort) local TOTAL=$(echo "$BACKUPS" | wc -l) if (( TOTAL <= KEEP_COUNT )); then log "✅ Nur $TOTAL Backups vorhanden, nichts zu löschen" return fi # Alte Backups ermitteln local TO_DELETE_COUNT=$((TOTAL - KEEP_COUNT)) local TO_DELETE=$(echo "$BACKUPS" | head -n "$TO_DELETE_COUNT") for b in $TO_DELETE; do log "🗑️ Lösche altes Backup: $REMOTE_PATH/$b" rclone delete "$REMOTE_PATH/$b" --rmdirs || log "⚠️ Fehler beim Löschen von $b" done log "✅ Alte Backups bereinigt" }