From a9daa12b9e7e2a5a4645b61d6c7676810d1c2b62 Mon Sep 17 00:00:00 2001 From: alf Date: Thu, 26 Mar 2026 08:52:56 +0000 Subject: [PATCH] rcloning_param.sh aktualisiert --- rcloning_param.sh | 55 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/rcloning_param.sh b/rcloning_param.sh index c8020e1..69b7d29 100644 --- a/rcloning_param.sh +++ b/rcloning_param.sh @@ -10,7 +10,6 @@ source "$GIT_PFAD/logger/logger.sh" LOGBUCH="$GIT_PFAD/logger/Logs/rcloning.log" log_init "$LOGBUCH" log_start -echo "Datei ./rclone.exclude wird beachtet." # --- Parameter-Auswertung --- usage() { @@ -40,15 +39,54 @@ if [ "$MODUS" != "sync" ] && [ "$MODUS" != "copy" ]; then usage fi +# Prüfen ob ZIEL ein rclone-Remote ist (Muster: "remotename:/pfad") +if ! echo "$ZIEL" | grep -qE '^[A-Za-z0-9_][A-Za-z0-9_.-]*:'; then + log_error "Fehler: ZIEL '$ZIEL' ist kein gültiger rclone-Remote. Erwartet: 'remotename:/pfad'." + log_error "Hinweis: Als ZIEL sind nur rclone-Remotes erlaubt (wegen --backup-dir)." + exit 1 +fi + +# Erreichbarkeit des Remotes testen +log_info "Prüfe Erreichbarkeit von ZIEL: $ZIEL" +if ! rclone lsd "$ZIEL" > /dev/null 2>&1; then + log_error "Fehler: ZIEL '$ZIEL' ist nicht erreichbar. Remote offline oder Pfad ungültig." + exit 1 +fi +log_info "ZIEL erreichbar." + # --- Einstellungen --- IST_TEST="nein" # ja: es wird nichts übertragen -Archivordner="$(date +%Y-%m-%d-%H)" +Archivordner="$(date +%y-%m-%d-%H)" ZIEL_CLEAN="${ZIEL%/}" # Trailing Slash entfernen ARCHIV="${ZIEL_CLEAN}_Archiv/$Archivordner" # Ergibt z. B.: spzssh:/srv/.../DPVonNextcloud_Archiv/25-03-26-14 LOGLVL="INFO" # Möglich: DEBUG, INFO, ERROR, NOTICE IGNORE="" # leeren, wenn nicht ignoriert werden soll -EXCLUDE=".git/" # Auszuschließende Dateien und Verzeichnisse +EXCLUDE="--exclude=.git/" # Fest ausgeschlossene Pfade + +# rclone.ignore aus QUELLE laden (lokal oder Remote) +EXCLUDE_FROM="" +TMP_IGNORE="" +if echo "$QUELLE" | grep -qE '^[A-Za-z0-9_][A-Za-z0-9_.-]*:'; then + # QUELLE ist ein Remote → Datei temporär herunterladen + TMP_IGNORE="$(mktemp)" + if rclone copyto "$QUELLE/rclone.ignore" "$TMP_IGNORE" 2>/dev/null; then + EXCLUDE_FROM="--exclude-from=$TMP_IGNORE" + log_info "rclone.ignore von Remote geladen: $QUELLE/rclone.ignore" + else + log_info "Keine rclone.ignore in Quelle gefunden, wird übersprungen." + rm -f "$TMP_IGNORE" + TMP_IGNORE="" + fi +else + # QUELLE ist lokal → direkt prüfen + if [ -f "$QUELLE/rclone.ignore" ]; then + EXCLUDE_FROM="--exclude-from=$QUELLE/rclone.ignore" + log_info "rclone.ignore gefunden: $QUELLE/rclone.ignore" + else + log_info "Keine rclone.ignore in Quelle gefunden, wird übersprungen." + fi +fi # --- Programm --- log_info "Starte Cloning..." @@ -63,21 +101,26 @@ log_info "Quelle: $QUELLE --> Ziel: $ZIEL" log_info "Archiv: $ARCHIV" log_info "Modus: $MODUS" log_info "Log-Level: $LOGLVL" -log_info "Ignoriert: $EXCLUDE" +log_info "Ignoriert (fest): $EXCLUDE" +log_info "Ignoriert (rclone.ignore): ${EXCLUDE_FROM:-keiner}" log_info "Bestehende Dateien überspringen: $IGNORE" log_info "Testlauf: $IST_TEST" log_info "Starte..." -rclone -P "$MODUS" "$QUErclone copy LLE" "$ZIEL" \ +rclone -P "$MODUS" "$QUELLE" "$ZIEL" \ --backup-dir="$ARCHIV" \ --log-file="$LOGBUCH" \ --log-level="$LOGLVL" \ + $EXCLUDE \ + $EXCLUDE_FROM \ $IGNORE \ - --ignore-from "./rclone.ignore" $DRYRUN log_error "ERR: $?" +# Temporäre ignore-Datei aufräumen (falls Remote-Quelle) +[ -n "$TMP_IGNORE" ] && rm -f "$TMP_IGNORE" + log_info "Archiv packen..." rclone archive create "$ARCHIV/" "$ARCHIV.zip" -P \ --log-level="$LOGLVL" \