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
- Zwei Quellen, ein Ziel: Synchronisiert sowohl
archive/(OCR-PDFs) als auchoriginals/(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.dbwerden 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.
- Python 3.9 oder höher
- Lesezugriff auf die Paperless-ngx-Datenverzeichnisse (
archive/undoriginals/) - Schreibzugriff auf den Zielordner (z. B. Dropbox-Ordner)
- Optional:
pytestfür die Tests
git clone https://github.com/UhlhornHH/paperless-dropbox-sync.git
cd paperless-dropbox-syncKopiere die Beispiel-Konfiguration und passe Pfade an:
cp config/paperless_sync.conf.example config/paperless_sync.confBeispielinhalt:
[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.iniPasse die Pfade an Deine Installation an.
python3 -m venv /tmp/pytest_venv
/tmp/pytest_venv/bin/pip install pytest
/tmp/pytest_venv/bin/pytest tests/test_sync.py -vPrüfe vor dem ersten echten Lauf, was das Skript tun würde:
python3 src/paperless_sync.py --config config/paperless_sync.conf --dry-runpython3 src/paperless_sync.py --config config/paperless_sync.confDie 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.timerStatus prüfen:
sudo systemctl status paperless-sync.path
sudo systemctl list-timers paperless-sync.timerFüge einen täglichen Cron-Job hinzu:
crontab -e0 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.
├── 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
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
MIT