Files
universalrclone/README.md
2026-03-26 08:52:15 +00:00

5.5 KiB
Raw Permalink Blame History

rcloning_param.sh

Ein Bash-Script zum flexiblen Synchronisieren oder Kopieren von Dateien zwischen rclone-Remotes — mit Quelle und Ziel als Aufrufparameter, automatischer Archivierung geänderter Dateien, dynamischem Exclude-Handling und strukturiertem Logging.


Funktionsweise

Das Script führt folgende Schritte in Sequenz aus:

  1. Validierung — Prüft Parameter, Modus-Angabe, Remote-Syntax von ZIEL und dessen Erreichbarkeit per rclone lsd.
  2. rclone.ignore laden — Sucht in QUELLE nach einer rclone.ignore-Datei und übergibt sie als --exclude-from, falls vorhanden.
  3. Synchronisation / Kopieren — Überträgt Dateien von QUELLE nach ZIEL per rclone sync oder rclone copy.
  4. Archivierung — Dateien, die am Ziel überschrieben oder gelöscht werden, landen vorher automatisch in einem stündlich benannten Archivordner neben dem Zielverzeichnis.
  5. ZIP-Erstellung — Das Archivverzeichnis wird als .zip gepackt.
  6. Aufräumen — Das Archivverzeichnis wird nach erfolgreichem Packen gelöscht.

Voraussetzungen

Anforderung Hinweis
rclone Installiert und konfiguriert (~/.config/rclone/rclone.conf)
logger.sh Eigenes Logging-Modul aus dem selben Gitea-Repository
GIT_PFAD Umgebungsvariable in .bashrc gesetzt (z. B. export GIT_PFAD="$HOME/Dokumente/Gitea")
ZIEL-Remote Muss in rclone konfiguriert und erreichbar sein

Verwendung

bash rcloning_param.sh <QUELLE> <ZIEL> [sync|copy]
Parameter Pflicht Beschreibung
QUELLE rclone-Remote oder lokaler Pfad
ZIEL rclone-Remote (zwingend, wegen --backup-dir)
Modus sync (Standard) oder copy

Beispiele

# Remote nach Remote, sync (Standard)
bash rcloning_param.sh ptv-nextcloud:/DPV spzssh:/srv/.../Ziel/

# Lokales Verzeichnis nach Remote
bash rcloning_param.sh /home/richard/Dokumente spzssh:/srv/.../Backup/

# Aktuelles Verzeichnis nach Remote
bash rcloning_param.sh . spzssh:/srv/.../Backup/

# Explizit copy statt sync
bash rcloning_param.sh ptv-nextcloud:/DPV spzssh:/srv/.../Ziel/ copy

Hinweis: Als ZIEL ist ausschließlich ein rclone-Remote erlaubt, da --backup-dir zwingend auf demselben Remote wie ZIEL liegen muss. Für rein lokale Transfers (Quelle und Ziel lokal) ist rsync die bessere Wahl.

Hinweis zu sync: Im Sync-Modus werden Dateien am Ziel gelöscht, die in der Quelle nicht mehr existieren. Alle betroffenen Dateien werden vorher ins Archiv verschoben.


Archiv-Logik

Der Archivpfad wird automatisch aus dem Zielpfad abgeleitet — kein zusätzlicher Parameter nötig:

ZIEL   →  spzssh:/srv/.../DPVonNextcloud/
ARCHIV →  spzssh:/srv/.../DPVonNextcloud_Archiv/25-03-26-14/
ZIP    →  spzssh:/srv/.../DPVonNextcloud_Archiv/25-03-26-14.zip

Der Ordnername entspricht dem Startzeitpunkt des Transfers im Format JJ-MM-TT-HH.

Exit-Code rclone archive create Verhalten
0 Erfolg → temporäres Verzeichnis wird gelöscht
3 Kein Archiv erstellt (keine geänderten/gelöschten Dateien) → Info-Meldung
Sonstige Fehler → Fehlermeldung im Log, Verzeichnis bleibt erhalten

Exclude-Handling

Das Script kombiniert zwei Mechanismen zum Ausschließen von Dateien:

1. Fest im Script kodiert:

.git/

2. Dynamisch per rclone.ignore:
Liegt in der QUELLE eine Datei namens rclone.ignore, wird sie automatisch als --exclude-from übergeben. Das Script erkennt dabei selbstständig, ob QUELLE lokal oder ein Remote ist:

QUELLE-Typ Vorgehen
Lokal Direkter Zugriff auf $QUELLE/rclone.ignore
Remote Temporärer Download per rclone copyto, Datei wird nach Transfer gelöscht

Ist keine rclone.ignore vorhanden, läuft das Script ohne --exclude-from weiter — kein Abbruch.

Format der rclone.ignore

Die Datei folgt dem rclone-Filterformat, ein Muster pro Zeile:

# Kommentare sind erlaubt
.DS_Store
Thumbs.db
tmp/
*.log

Weitere Informationen: rclone filtering


Interne Einstellungen

Folgende Variablen können direkt im Script angepasst werden:

Variable Beschreibung Standard
IST_TEST Testlauf ohne Übertragung (--dry-run) nein
LOGLVL Detailgrad des rclone-Logs INFO
IGNORE Optionaler rclone-Parameter (z. B. --ignore-existing) leer
EXCLUDE Fest ausgeschlossene Pfade --exclude=.git/

Logging

Das Script nutzt logger.sh für strukturiertes Logging. Die Logdatei liegt unter:

$GIT_PFAD/logger/Logs/rcloning.log

rclone schreibt ebenfalls direkt in diese Datei (--log-file). Vor dem Transfer werden alle relevanten Parameter ins Log geschrieben.


Validierungen beim Start

Das Script bricht mit einer Fehlermeldung ab, wenn:

  • QUELLE oder ZIEL fehlen
  • der Modus weder sync noch copy ist
  • ZIEL nicht dem Format remotename:/pfad entspricht
  • ZIEL per rclone lsd nicht erreichbar ist

Als Cronjob

# Täglich um 02:00 Uhr
0 2 * * * /bin/bash /pfad/zu/rcloning_param.sh ptv-nextcloud:/DPV spzssh:/srv/.../Ziel/

Bekannte Einschränkungen

  • rclone archive ist ein experimenteller Subcommand — nicht in allen rclone-Versionen standardmäßig verfügbar.
  • ZIEL muss zwingend ein Remote sein. Ein lokales Verzeichnis als ZIEL wird vom Script abgelehnt.
  • Bei Remote-QUELLE wird rclone.ignore temporär nach /tmp heruntergeladen und danach automatisch gelöscht.