From 38e745419ec58327c88923a4be6b87dfa3670a60 Mon Sep 17 00:00:00 2001 From: alf Date: Thu, 26 Mar 2026 08:12:04 +0000 Subject: [PATCH] =?UTF-8?q?rcloning=5Fparam.sh=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rcloning_param.sh | 99 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 rcloning_param.sh diff --git a/rcloning_param.sh b/rcloning_param.sh new file mode 100644 index 0000000..fbdfc87 --- /dev/null +++ b/rcloning_param.sh @@ -0,0 +1,99 @@ +#!/bin/bash +# rcloning_param.sh +# Verwendung: bash rcloning_param.sh [sync|copy] +# Beispiel: bash rcloning_param.sh ptv-nextcloud:/DPV spzssh:/srv/.../Ziel/ sync + +# Voraussetzungen: rclone installiert +# und GIT_PFAD wurde in .bashrc gesetzt. +GIT_PFAD="$HOME/Dokumente/Gitea" +source "$GIT_PFAD/logger/logger.sh" +LOGBUCH="$GIT_PFAD/logger/Logs/rcloning.log" +log_init "$LOGBUCH" +log_start + +# --- Parameter-Auswertung --- +usage() { + echo "Verwendung: $(basename "$0") [sync|copy]" + echo "" + echo " QUELLE rclone-Remote und Pfad, z. B. ptv-nextcloud:/DPV" + echo " ZIEL rclone-Remote und Pfad, z. B. spzssh:/srv/.../Ziel/" + echo " Modus Optional: sync (Standard) oder copy" + echo "" + echo "Beispiel:" + echo " $(basename "$0") ptv-nextcloud:/DPV spzssh:/srv/.../Ziel/ sync" + exit 1 +} + +if [ -z "$1" ] || [ -z "$2" ]; then + log_error "Fehler: QUELLE und ZIEL müssen als Parameter übergeben werden." + 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." + usage +fi + +# --- 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=".git/" # Auszuschließende Dateien und Verzeichnisse + +# --- Programm --- +log_info "Starte Cloning..." + +if [ "$IST_TEST" = "ja" ]; then + DRYRUN="--dry-run" +else + DRYRUN="" +fi + +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 "Bestehende Dateien überspringen: $IGNORE" +log_info "Testlauf: $IST_TEST" +log_info "Starte..." + +rclone -P "$MODUS" "$QUELLE" "$ZIEL" \ + --backup-dir="$ARCHIV" \ + --log-file="$LOGBUCH" \ + --log-level="$LOGLVL" \ + $IGNORE \ + $DRYRUN + +log_error "ERR: $?" + +log_info "Archiv packen..." +rclone archive create "$ARCHIV/" "$ARCHIV.zip" -P \ + --log-level="$LOGLVL" \ + --log-file="$LOGBUCH" +ERR="$?" + +log_info "Fertig. ERR: $ERR" + +if [ "$ERR" = "0" ]; then + log_info "Archiv-Verzeichnis löschen..." + rclone purge "$ARCHIV/" -P --log-file="$LOGBUCH" --log-level=DEBUG + log_info "Fertig. ERR: $?" +else + if [ "$ERR" = "3" ]; then + log_error "Es wurde kein Archiv erstellt. Wahrscheinlich keine zu archivierenden Dateien vorhanden." + else + log_error "Beim Erstellen des Archivs kam es zu einem Problem." + fi +fi + +log_end \ No newline at end of file