From cd447a486dadd1c5d0c3e9e0564c939a93772de7 Mon Sep 17 00:00:00 2001 From: alf Date: Thu, 26 Mar 2026 10:42:56 +0000 Subject: [PATCH] rcloning.sh aktualisiert --- rcloning.sh | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/rcloning.sh b/rcloning.sh index 69b7d29..526ac30 100644 --- a/rcloning.sh +++ b/rcloning.sh @@ -5,9 +5,23 @@ # Voraussetzungen: rclone installiert # und GIT_PFAD wurde in .bashrc gesetzt. -GIT_PFAD="$HOME/Dokumente/Gitea" + +# --- Einstellungen --- +QUELLE="$1" +ZIEL="$2" +MODUS="${3:-sync}" # Dritter Parameter optional, Standard: sync +IST_TEST="nein" # ja: es wird nichts übertragen +Archivordner="$(date +%y-%m-%d-%H)" +ZIEL_CLEAN="${ZIEL%/}" # Trailing Slash entfernen +QUELLE_CLEAN="${QUELLE%/}" +ARCHIV="${ZIEL_CLEAN}_Archiv/$Archivordner" +# Ergibt z. B.: spzssh:/srv/.../DPVonNextcloud_Archiv/25-03-26-14 +LOGLVL="INFO" # Möglich: DEBUG, INFO, ERROR, NOTICE + +GIT_PFAD="$HOME/Dokumente/Gitea" # Je nach Gerät mglw. anders source "$GIT_PFAD/logger/logger.sh" LOGBUCH="$GIT_PFAD/logger/Logs/rcloning.log" + log_init "$LOGBUCH" log_start @@ -29,10 +43,6 @@ if [ -z "$1" ] || [ -z "$2" ]; then usage fi -QUELLE="$1" -ZIEL="$2" -MODUS="${3:-sync}" # Dritter Parameter optional, Standard: sync - # Validierung Modus if [ "$MODUS" != "sync" ] && [ "$MODUS" != "copy" ]; then log_error "Fehler: Ungültiger Modus '$MODUS'. Erlaubt: sync oder copy." @@ -54,25 +64,16 @@ if ! rclone lsd "$ZIEL" > /dev/null 2>&1; then fi log_info "ZIEL erreichbar." -# --- Einstellungen --- -IST_TEST="nein" # ja: es wird nichts übertragen -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="--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 + if rclone copyto "$QUELLE_CLEAN/rclone.ignore" "$TMP_IGNORE" 2>/dev/null; then EXCLUDE_FROM="--exclude-from=$TMP_IGNORE" - log_info "rclone.ignore von Remote geladen: $QUELLE/rclone.ignore" + log_info "rclone.ignore von Remote geladen: $QUELLE_CLEAN/rclone.ignore" + log_info "Temporäres Verzeichnis: $TMP_IGNORE" else log_info "Keine rclone.ignore in Quelle gefunden, wird übersprungen." rm -f "$TMP_IGNORE" @@ -80,9 +81,9 @@ if echo "$QUELLE" | grep -qE '^[A-Za-z0-9_][A-Za-z0-9_.-]*:'; then 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" + if [ -f "$QUELLE_CLEAN/rclone.ignore" ]; then + EXCLUDE_FROM="--exclude-from=$QUELLE_CLEAN/rclone.ignore" + log_info "rclone.ignore gefunden: $QUELLE_CLEAN/rclone.ignore" else log_info "Keine rclone.ignore in Quelle gefunden, wird übersprungen." fi @@ -101,9 +102,7 @@ log_info "Quelle: $QUELLE --> Ziel: $ZIEL" log_info "Archiv: $ARCHIV" log_info "Modus: $MODUS" log_info "Log-Level: $LOGLVL" -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..." @@ -111,9 +110,7 @@ rclone -P "$MODUS" "$QUELLE" "$ZIEL" \ --backup-dir="$ARCHIV" \ --log-file="$LOGBUCH" \ --log-level="$LOGLVL" \ - $EXCLUDE \ $EXCLUDE_FROM \ - $IGNORE \ $DRYRUN log_error "ERR: $?"