5.5 KiB
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:
- Validierung — Prüft Parameter, Modus-Angabe, Remote-Syntax von ZIEL und dessen Erreichbarkeit per
rclone lsd. - rclone.ignore laden — Sucht in QUELLE nach einer
rclone.ignore-Datei und übergibt sie als--exclude-from, falls vorhanden. - Synchronisation / Kopieren — Überträgt Dateien von
QUELLEnachZIELperrclone syncoderrclone copy. - Archivierung — Dateien, die am Ziel überschrieben oder gelöscht werden, landen vorher automatisch in einem stündlich benannten Archivordner neben dem Zielverzeichnis.
- ZIP-Erstellung — Das Archivverzeichnis wird als
.zipgepackt. - 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-dirzwingend auf demselben Remote wie ZIEL liegen muss. Für rein lokale Transfers (Quelle und Ziel lokal) istrsyncdie 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:
QUELLEoderZIELfehlen- der Modus weder
syncnochcopyist ZIELnicht dem Formatremotename:/pfadentsprichtZIELperrclone lsdnicht 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 archiveist 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.ignoretemporär nach/tmpheruntergeladen und danach automatisch gelöscht.