diff --git a/README.md b/README.md new file mode 100644 index 0000000..6c118a5 --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +# rcloning.sh + +Ein Bash-Script zum automatisierten Synchronisieren von Dateien zwischen zwei rclone-Remotes mit integrierter Archivierung und strukturiertem Logging. + +--- + +## Funktionsweise + +Das Script führt folgende Schritte in Sequenz aus: + +1. **Synchronisation / Kopieren** — Überträgt Dateien von `QUELLE` nach `ZIEL` per `rclone sync` oder `rclone copy`. +2. **Archivierung** — Dateien, die am Ziel überschrieben oder gelöscht werden, landen vorher automatisch in einem stündlich benannten Archivordner (`JJ-MM-TT-HH`). +3. **ZIP-Erstellung** — Das Archivverzeichnis wird als `.zip` gepackt. +4. **Aufräumen** — Das Archivverzeichnis wird nach erfolgreichem Packen gelöscht; bei Fehlercode `3` (kein Archiv nötig, da keine Änderungen) wird eine entsprechende Info geloggt. + +--- + +## Voraussetzungen + +| Anforderung | Hinweis | +|---|---| +| `rclone` | Muss installiert und konfiguriert sein | +| `logger.sh` | Eigenes Logging-Modul, Pfad über `GIT_PFAD` | +| `GIT_PFAD` | Umgebungsvariable, in `.bashrc` gesetzt (z. B. `~/Dokumente/Gitea`) | +| Konfigurierte Remotes | `ptv-nextcloud` und `spzssh` müssen in `~/.config/rclone/rclone.conf` vorhanden sein | + +--- + +## Konfiguration + +Alle Einstellungen befinden sich im Abschnitt `# Einstellungen #` am Anfang des Scripts: + +| Variable | Beschreibung | Beispielwert | +|---|---|---| +| `IST_TEST` | Testlauf ohne Übertragung (`--dry-run`) | `ja` / `nein` | +| `QUELLE` | Quell-Remote und -Pfad | `ptv-nextcloud:/DPV` | +| `ZIEL` | Ziel-Remote und -Pfad | `spzssh:/srv/.../DPVonNextcloud/` | +| `ARCHIV` | Zielort für archivierte (überschriebene/gelöschte) Dateien | `spzssh:/srv/.../Archiv/JJ-MM-TT-HH` | +| `MODUS` | Übertragungsmodus | `sync` oder `copy` | +| `LOGLVL` | Detailgrad des rclone-Logs | `DEBUG`, `INFO`, `NOTICE`, `ERROR` | +| `IGNORE` | Optionaler rclone-Parameter zum Überspringen vorhandener Dateien | leer lassen, wenn nicht benötigt | +| `EXCLUDE` | Auszuschließende Pfade/Dateien | `.git/` | + +> **Hinweis:** Bei `MODUS=sync` werden am Ziel Dateien gelöscht, die in der Quelle nicht mehr existieren. Gelöschte/überschriebene Dateien werden vorher in `ARCHIV` gesichert. + +--- + +## Logging + +Das Script nutzt `logger.sh` für strukturiertes Logging. Die Logdatei liegt unter: + +``` +$GIT_PFAD/logger/Logs/rcloning.log +``` + +Zusätzlich schreibt `rclone` direkt in dieselbe Datei (`--log-file`). Log-Level für rclone und das interne Logger-Modul werden separat über `LOGLVL` gesteuert. + +--- + +## Archiv-Logik + +Der Archivordner wird nach Datum und Stunde benannt: + +``` +Archiv/ +└── 25-03-26-14/ ← Verzeichnis (temporär) + └── ... +25-03-26-14.zip ← Gepacktes Archiv (dauerhaft) +``` + +| Exit-Code `rclone archive create` | Verhalten | +|---|---| +| `0` | Erfolg → temporäres Verzeichnis wird gelöscht | +| `3` | Kein Archiv erstellt (keine überschriebenen/gelöschten Dateien) → Info-Meldung | +| Sonstige | Fehler → Fehlermeldung im Log, Verzeichnis bleibt erhalten | + +--- + +## Verwendung + +```bash +# Direkter Aufruf +bash rcloning.sh + +# Als Cronjob (täglich um 02:00 Uhr) +0 2 * * * /bin/bash /pfad/zu/rcloning.sh +``` + +Für einen Testlauf ohne tatsächliche Übertragung `IST_TEST="ja"` setzen. + +--- + +## Bekannte Einschränkungen + +- `rclone archive` ist ein experimentelles Plugin/Subcommand — nicht in allen rclone-Versionen standardmäßig verfügbar. +- Der Syntax `if [ $IST_TEST = "ja"]` enthält einen fehlenden Leerzeichen vor `]` — sollte zu `[ $IST_TEST = "ja" ]` korrigiert werden. +- Pfade im `ZIEL` und `ARCHIV` sind aktuell fest im Script kodiert und sollten bei Änderung der Disk-UUID angepasst werden. \ No newline at end of file