Ordnerstruktur PaperlessNGX

Hi,

Paperless legt für dich die Ordnerstruktur an und verschiebt auch die Dateien wenn du in einem oder mehreren Dokumenten den Speicherpfad änderst.
Paperless löscht dir aber nicht die Ordner wo dann keine Dokumente mehr drin sind, so viel ich weiss.
Manuelles bereinige der Verzeichnisse nimmt dir die Datenbank evtl übel, also Finger weg!

Wenn du mal extrem gewütet hast kannst du einen Export machen, den Media Ordner löschen und den Export importieren, dann werden die Ordner nach den Speicherpfaden neu angelegt.

Testumgebung, ja wenn es dich beruhigt.
Allerdings hast du irgendwann die Finale Installation und willst Pfade ändern, dann musst du auch darauf vertrauen dass das System funktioniert.

Tägliche Datensicherung ist sinnvoller als Testumgebung, Snapshots, Exporte, Paperless Verzeichnis sichern, dann kannst du im WorstCase deine Daten schnell wiederherstellen.

Hallo Jake,

Das war die Antwort, die ich gebraucht habe! - Danke für den Tipp. :+1:

Die Testumgebung dachte ich mir, weil ich gern eine perfekte Neuinstallation aufsetzen möchte, mit den besten Erfahrungen zu Paperless, ohne dann noch mal nachzubessern und dann ggf. noch Datenschrott zu produzieren, den man dann mitschleppt, was einem dann irgendwann auf die Füße fällt.

Das Backup-Thema muss sich mir dann noch einmal anschauen, das weiß ich noch nicht, wie ich das auf meiner Ugreen 4800 Plus gestalten kann.

Beste Grüße, Stefan

Hier ein Beispiel für ein Backup. Musst aber noch einige Pfade vielleicht anpassen.

https://crydteam.de/2025/03/23/paperless-backup-skript/

Viel Glück, wenn du das schaffst bist du der erste!
Und wenn ein paar Ordner leer sind, was macht das schon, belegen ja keinen Speicher.

Deine Ugreen Platten sind sicher mit Btrfs formatiert, dann kannst du auch Snapshots machen.

Hallo Brumbus,

Ergänzend noch folgendes aus der Paperless Doku:

“Paperless checks the filename of a document whenever it is saved. Changing (or deleting) a storage path will automatically be reflected in the file system. However, when changing PAPERLESS_FILENAME_FORMAT you will need to manually run the document renamer to move any existing documents.”

Das ganze ist ziemlich gut in der Doku beschrieben. Du findest es über Paperless (links unten auf Dokumentation klicken) → Advanced Topics → File name handling

Hallo Onkelsascha,

wie rufe ich den denn auf?

@ Jake:

Sollte das nicht unser aller Anspruch sein? :smiley:

Kriege ich das auch auf meiner Ugreen zum laufen?

Beset Grüße, Stefan

Das findest Du auch in der Doku unter Administration → Managing filenames

Ja das bekommst du auch auf der Ugreen zum laufen. Habe dies im Verzeichnis wo die docker-compose.yml liegt abgelegt. Das einzige was beim Ugreen nicht so schön ist, das es keinen Aufgabenplaner wie bei Synology gibt. Bei der Synology habe ich eine tägliches Backup eingestellt.

Dokumenttyp

Ordner7 Immobilie

Im Speicherpfad steht

07.01 Bayernwerk —> Photovoltaik Vergütungsvertrag

07.02 Kaminkehrer

07.03 Heizung —> Rechnungen für Heizöl und Wartung

07.04 Wasser —> alles was vom Wasserversorger kommt incl. Abwasser

07.05 Stromvertrag —> für Bezug vom Versorger

……

Im Übrigen habe ich auch bereits Dokumente von einem Speicherpfad in einen anderen durch Änderung im Dokument quasi “verschoben“. Das leere Verzeichnis habe ich nicht gelöscht. Ich habe den Speicherpfad in leer umbenannt.

Hallo Schwingsi,

vielen Dank für die Bereitstellung der Struktur. Wie sieht denn ein Speicherpfadeintrag in Paperless NGX aus? - also die Eintragung zu einem Speicherpfad mit den geschweiften Klammern und Platzhaltern?

Beste Grüße aus Hamburg,

Stefan

Hallo Stefan,

Aufgrund der Jahreszahl im Datum wird automatisch ein Verzeichnis 2025 angelegt. Darunter befinden sich dann die Speicherpfade, die ich vergebe.

Hallo zusammen,

ich hatte mir gewünscht folgende Struktur dynamisch über Tags zu erreichen:

Topthema/Branche_Correspodent/Document_Type/Datum_Titel.pdf

Dabei habe ich tags die mit “top_” oder “br_” beginnen vergeben. In dem Speicherpfad steckt dann folgendes Jinja:

{# ----------------------------------------------------------- #
 # Paperless-ngx Ablagestruktur
 # Struktur: <Topthema>/<Branche>_<Korrespondent>/<Dokumenttyp>/<Datum_Titel>.pdf
 # ------------------------------------------------------------ #}

{# 1️⃣ Topthema bestimmen #}
{% set top = 'Allgemein' %}
{% for tag in tag_name_list %}
  {% if tag[:4] == 'top_' %}
    {% set top = tag[4:] %}
  {% endif %}
{% endfor %}

{# 2️⃣ Branche bestimmen #}
{% set branch = '' %}
{% for tag in tag_name_list %}
  {% if tag[:3] == 'br_' %}
    {% set branch = tag[3:] %}
  {% endif %}
{% endfor %}

{# 3️⃣ Korrespondent bereinigen #}
{% set corr_raw = correspondent | default('') | trim %}
{% if corr_raw %}
  {% set corr = corr_raw
      | replace(' ', '_')
      | replace('/', '_')
      | replace('\\', '_')
      | replace(':', '-')
      | replace('*', '')
      | replace('?', '')
      | replace('"', '')
      | replace('<', '')
      | replace('>', '')
      | replace('|', '')
      | replace('ä', 'ae')
      | replace('ö', 'oe')
      | replace('ü', 'ue')
      | replace('Ä', 'Ae')
      | replace('Ö', 'Oe')
      | replace('Ü', 'Ue')
      | replace('ß', 'ss')
  %}
{% else %}
  {% set corr = '' %}
{% endif %}

{# 4️⃣ Dokumenttyp bestimmen #}
{% set doctype = document_type | default('Sonstiges') | trim %}
{% if doctype == '' %}
  {% set doctype = 'Sonstiges' %}
{% endif %}

{# 5️⃣ Pfad zusammensetzen #}
{% set path = top %}
{% if branch and corr %}
  {% set path = path ~ '/' ~ branch ~ '_' ~ corr %}
{% elif branch %}
  {% set path = path ~ '/' ~ branch %}
{% elif corr %}
  {% set path = path ~ '/Sonstiges_' ~ corr %}
{% else %}
  {% set path = path ~ '/Sonstiges' %}
{% endif %}
{% set path = path ~ '/' ~ (doctype | capitalize) %}

{# 6️⃣ Titel bereinigen & kürzen #}
{% set title_raw = title | default('Dokument') | trim %}
{% set title_clean = title_raw
    | replace('/', '_')
    | replace('\\', '_')
    | replace(':', '-')
    | replace('*', '')
    | replace('?', '')
    | replace('"', '')
    | replace('<', '')
    | replace('>', '')
    | replace('|', '')
    | replace('ä', 'ae')
    | replace('ö', 'oe')
    | replace('ü', 'ue')
    | replace('Ä', 'Ae')
    | replace('Ö', 'Oe')
    | replace('Ü', 'Ue')
    | replace('ß', 'ss')
%}

{# Mehrfache Unterstriche manuell reduzieren #}
{% set title_fixed = '' %}
{% set last_char = '' %}
{% for ch in title_clean %}
  {% if not (ch == '_' and last_char == '_') %}
    {% set title_fixed = title_fixed ~ ch %}
  {% endif %}
  {% set last_char = ch %}
{% endfor %}

{# Titel auf max. 80 Zeichen kürzen #}
{% if title_fixed | length > 80 %}
  {% set title_fixed = title_fixed[:80] %}
{% endif %}

{# 7️⃣ Dateiname mit Datum erstellen #}
{% set filename = created_year ~ '-' ~ "%02d"|format(created_month|int) ~ '-' ~ "%02d"|format(created_day|int) ~ '_' ~ title_fixed %}

{{ path }}/{{ filename }}

Noch ein bisschen Zeichnepflege und Fehlerkorrektur habe ich dazwischen gepackt…

Leider funktioniert das so nicht, da er die Tags mit “top_” oder “br_” ignoriert. Ich habe die Dokumentation von Paperless und auch Jinja allgemein gelesen und komme nicht auf den Fehler. Habe auch bereits einige Befehle durch andere ersetzt, um sandbox-spezifika von paperless zu testen, aber leider ohne Erfolg.

Wenn es funktioniert könnte die Struktur dann so aussehen:

top_Haus/
│   ├─ br_Wohnen_HandwerkerMeier/
│   │   ├─ Rechnung/
│   │   └─ Angebot/
│   └─ br_Energie_Eon/
│       ├─ Strom/
│       └─ Gas/
│
top_Allgemein/
│   └─ br_Telekom_Vodafone/
│       ├─ Vertrag/
│       └─ Rechnung/

Wobei ich den tagnamen noch vom präfix befreien wollen würde.

Hat einer von euch eine Idee?

Beste Grüße

Hallo Schwingsi,

vielen Dank für die Veröffentlichung deiner Ordnerstruktur.

Ich bin ganz neu im “paperless-game”.

Wäre es unverschämt zu fragen, ob du mir deine gesamte Ordnerstruktur zur Verfügung stellen könntest?

Du hast dir im Vorfeld anscheinend viele Gedanken gemacht.

Vielen Dank bereits im Voraus :slight_smile:

Hallo floassenbaum,

ich schaue was ich machen kann. Allerdings werde ich nicht alle Speicherpfade posten. Ich hoffe, Du hast dafür Verständnis

Hallo und vielen Dank einstweilen. Selbstverständlich habe ich dafür Verständnis. Aber gerade als Neuling ist deine Struktur eine sehr große Hilfe.

Hallo Ffloassenbaum,

ich habe folgende Korrespondenten:

Ehefrau, Kind1, Kind2, Enkelkind1, Enkelkind2, Schwiegermutter, Schwiegervater und me.

Dann gibt es folgende Dokumententypen wie folgt

Dann kommen die Speicherpfade. Da liegt es an Dir, welche “Feinheiten“ du erreichen willst.

Arbeit und Beruf habe ich nur 3 verschiedene: Zeugnisse, Gehaltsabrechnungen, Arbeitsvertrag.

Bei Fahrzeuge habe ich Kfz-Steuer, Rechnung Inspektion, Kaufvertrag Kfz und was noch alles zum Fahrzeug gehört.

Bei Finanzen ist es schon umfangreicher. Kontoauszüge, Schriftverkehr Bank, Identifikationsnummer SEPA Mandate Finanzamt usw.

Bei Gesundheit kommt es darauf an, wie detailliert man werden will. Wenn ich einmalig zu einer Kur weg war, findet sich das Dokument im allgemeinen Schriftverkehr unter Ordner4 Gesundheit. Briefe von Ärzten oder Krankenhäusern habe ich jeweils einen eigenen Speicherpfad.

Und so geht es weiter. Es liegt an Dir, wie detailliert du es treiben möchtest.

Ich habe auch bereits festgestellt, dass ich zwei Speicherpfade falsch einsortiert habe. Ich habe dann einen neuen Speicherpfad unter dem richtigen Ordner angelegt und die betreffenden Dokumente neu zugeordnet. Den dann leeren Speicherpfad habe ich nicht gelöscht, sondern umbenannt in leer.

Irgendwie verstehe ich unter Korrespondenten meine Kommunikationspartner. Also z.B. meine Versicherung oder mein Telekommunikationsanbieter und sowas.

1 „Gefällt mir“

Jeder hat da seine eigene Vorgehensweise

1 „Gefällt mir“

Ich habe mir für die Familienmitglieder ein benutzerdefiniertes Feld angelegt (Auswahl). Über die Unterordner im Scaninput (Familienmitglieder) werden über ein Arbeitsablauf das benutzerdefinierte Feld mit dem Namen automatisch befüllt. Ein Arbeitsablauf fügt automatisch bei Dokument hinzugefügt einige benutzerdefinierte Felder hinzu. So habe ich die Korrespondenten frei.

Vielen Dank nochmals für deine Erläuterung. Ich habe heute Zeit gefunden, den Start meiner Produktivumgebung zu wagen. Mal sehen wie sich meine Struktur entwickelt.

1 „Gefällt mir“