Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Paperless-ngx Dropbox Sync

Dieses Skript synchronisiert alle Dokumente aus Paperless-ngx (archive/ und originals/) in einen lokalen Zielordner – beispielsweise einen Dropbox-Ordner. So stehen die Dokumente außerhalb von Paperless strukturiert zur Verfügung, zum Beispiel für:

  • lokale Durchsuchbarkeit unter macOS Spotlight
  • einen zusätzlichen Zweitort neben Paperless
  • die Weitergabe an Dritte (Steuerberater, Versicherung, Familie)
  • ein übersichtliches Jahresarchiv

Besonderheiten

  • Zwei Quellen, ein Ziel: Synchronisiert sowohl archive/ (OCR-PDFs) als auch originals/ (Original-Uploads).
  • Priorität: Existiert eine Datei in beiden Quellen, gewinnt die OCR-Version aus archive/.
  • SHA-256-Prüfung: Vergleicht Dateien anhand ihres Inhalts, nicht nur nach Zeitstempel.
  • Unicode-Normalisierung: Verhindert Probleme mit Umlauten und Sonderzeichen (NFC/NFD).
  • Exclude-Muster: Dropbox-Metadaten wie .sync/, .DS_Store, Thumbs.db werden ignoriert.
  • Atomares Kopieren: Neue Dateien werden erst als temporäre Datei geschrieben und dann umbenannt.
  • Lockfile: Verhindert parallele Läufe.
  • Logging: Detaillierte Logs mit Zeitstempel.

Voraussetzungen

  • Python 3.9 oder höher
  • Lesezugriff auf die Paperless-ngx-Datenverzeichnisse (archive/ und originals/)
  • Schreibzugriff auf den Zielordner (z. B. Dropbox-Ordner)
  • Optional: pytest für die Tests

Installation

1. Repository klonen

git clone https://github.com/UhlhornHH/paperless-dropbox-sync.git
cd paperless-dropbox-sync

2. Konfiguration anpassen

Kopiere die Beispiel-Konfiguration und passe Pfade an:

cp config/paperless_sync.conf.example config/paperless_sync.conf

Beispielinhalt:

[paths]
archive_dir   = /home/paperless/paperless-ngx/media/documents/archive
originals_dir = /home/paperless/paperless-ngx/media/documents/originals
target_dir    = /home/paperless/Dropbox/Paperless Dokumentenarchiv

[options]
log_level     = INFO
exclude       = .sync/, .DS_Store, Thumbs.db, desktop.ini

Passe die Pfade an Deine Installation an.

3. Tests ausführen (optional)

python3 -m venv /tmp/pytest_venv
/tmp/pytest_venv/bin/pip install pytest
/tmp/pytest_venv/bin/pytest tests/test_sync.py -v

4. Trockenlauf

Prüfe vor dem ersten echten Lauf, was das Skript tun würde:

python3 src/paperless_sync.py --config config/paperless_sync.conf --dry-run

5. Erster echter Lauf

python3 src/paperless_sync.py --config config/paperless_sync.conf

6. Automatisierung

Variante A: systemd.path + systemd.timer (empfohlen)

Die paperless-sync.path-Unit startet den Sync sofort, wenn sich die obersten Ebenen von archive/ oder originals/ ändern. Da systemd.path nicht rekursiv in Unterverzeichnisse hineinschaut, ergänzen wir einen Timer, der alle 10 Minuten nachholt.

sudo install -m 644 deploy/paperless-sync.path /etc/systemd/system/
sudo install -m 644 deploy/paperless-sync.service /etc/systemd/system/
sudo install -m 644 deploy/paperless-sync.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable paperless-sync.path
sudo systemctl start paperless-sync.path
sudo systemctl enable paperless-sync.timer
sudo systemctl start paperless-sync.timer

Status prüfen:

sudo systemctl status paperless-sync.path
sudo systemctl list-timers paperless-sync.timer

Variante B: Cron

Füge einen täglichen Cron-Job hinzu:

crontab -e
0 7 * * * /usr/bin/python3 /pfad/zu/paperless-dropbox-sync/src/paperless_sync.py --config /pfad/zu/paperless-dropbox-sync/config/paperless_sync.conf >> /pfad/zu/paperless-dropbox-sync/sync.log 2>&1

Dateistruktur

.
├── config/
│   └── paperless_sync.conf.example
├── deploy/
│   ├── cron.example
│   ├── paperless-sync.path
│   ├── paperless-sync.service
│   └── paperless-sync.timer
├── src/
│   └── paperless_sync.py
└── tests/
    └── test_sync.py

Verwendung

python3 src/paperless_sync.py --config config/paperless_sync.conf [--dry-run] [--log-datei DATEI]

Parameter:

  • --config: Pfad zur Konfigurationsdatei
  • --dry-run: Simuliert den Lauf ohne Dateien zu verändern
  • --log-file: Optionaler Pfad zur Logdatei

Lizenz

MIT

About

Synchronisiert Paperless-ngx Dokumente (archive und originals) mit einer lokalen Ordnerstruktur – z. B. für Dropbox, macOS Spotlight oder Backups.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages