xCtrl
Lt. Commander
- Registriert
- Dez. 2011
- Beiträge
- 1.569
Guten Abend in die Runde,
ich erarbeite seit ein paar Tagen ein automatisches Ablagesystem für PDF-Dateien - vom Gedanke bis zum jetzigen Zeitpunkt. Als Unterbau kommt unRaid zum Einsatz mit einem Docker Container und einer Debian VM sowie SMB-Freigaben auf dem unRaid.
Die Basis:
Folgender Workflow:
Ordner "Scan-In"
Ordner "Scan-Out"
Ordner "Kategorie" (z.B. Rechnungen)
Der Container läuft schon mal und "ocr't" die eingehenden PDFs zuverlässig.
Diese Befehle und Variablen habe ich mir soweit ausgearbeitet und von Hand Schritt für Schritt durchgeführt. Auch das funktioniert wie gedacht.
ist halt im Moment eher eine Ansammlung von Befehlen, womit ich mir gerne ein Script bauen mag, welche per cronjob jede Minute ausgeführt wird. Am liebsten wäre mir noch eine Abfrage am Anfang des Scripts, welche den Ordner überwacht und sobald eine PDF Datei dort auftaucht erst anläuft.
Für das Schreiben des Scripts bin ich noch zu doof.... quasi TILT im Hirn aktuell.
Ich bin schon mal froh, dass das Konstrukt an sich funktioniert, wenn auch nicht so flexibel wie ein DMS. Ein DMS wiederrum würde ich für mein Vorhaben eher als Overkill ansehen. Ich kann jeder Zeit meine Datei "pdf_pattern" mit meinen eigenen Schlagworten erweitern, welche dann aber nur neu dazu kommende Dateien berücksichtigen wird - soll für den Anfang erstmal reichen.
Ein paar Fragen habe ich jetzt:
1. ist der Inhalt aus dem Spoiler für ein Script brauchbar? weitere Ideen?
2. wie funktioniert das mit den Cronjobs? Ich habe bis Dato nie einen zum laufen bekommen
3. kann ich mittels UserScript unter unRaid in der Debian VM das Script anstoßen?
4. Ich bin einfach zu doof für Schleifen: Was wäre die beste Methode das Script am Anfang den Ordner "zu überwachen" und erst bei Eingang einer PDF-Datei los zu legen?
Ich hoffe mein Geschreibsel ist soweit verständlich. Wenn nicht, dann bitte ich um Nachfragen sowie konstruktives Feedback und eine rege Diskussion
Gruß
Chris
ich erarbeite seit ein paar Tagen ein automatisches Ablagesystem für PDF-Dateien - vom Gedanke bis zum jetzigen Zeitpunkt. Als Unterbau kommt unRaid zum Einsatz mit einem Docker Container und einer Debian VM sowie SMB-Freigaben auf dem unRaid.
Die Basis:
- unRaid 6.9 auf Pentium Mini ITX, 16GB Ram, 8TB Netto-Speicher
- Docker Container ocrmypdf-auto
- VM mit Debian Bullseye und installierten "pdfgrep" und Mountpunkt zu einem unRaid Share
Folgender Workflow:
Ordner "Scan-In"
- wird gefüttert mit "Datei von Hand dort kopieren" oder "PDF-Scan vom Brother Drucker" (quasi eine eigene Dropzone)
- Docker "ocrmypdf-auto" nimmt sich die Datei, "ocr't" sie durch und packt sie als durchsuchbare PDF in den Ordner "Scan-Out"
Ordner "Scan-Out"
- durchsuchbare PDF liegt bereit
- Debian VM nimmt sich die Datei, sucht per "pdfgrep" von mir in einer Datei hinterlegten Schlagwort(e) und benennt sie in diesem Format um: "YYYY-MM-DD-Dateiname_aus_Schlagwort.pdf" (z.B. 2021_Rechnung_Vodafone.pdf)
- weiter soll in diesem Zuge die Datei in den passenden Ordner verschoben werden. (Beispiel Vodafone im Dateiname -> verschiebe in Ordner "Rechnungen Vodafone") oder ähnlich.
Ordner "Kategorie" (z.B. Rechnungen)
- hier sollen die PDF-Dateien dann passend nach Schlagwort im Dateinamen landen.
- unter Windows/Mac/iPad/Linux kann später der Dateiname oder Dateinhalt durchsucht werden
Der Container läuft schon mal und "ocr't" die eingehenden PDFs zuverlässig.
Diese Befehle und Variablen habe ich mir soweit ausgearbeitet und von Hand Schritt für Schritt durchgeführt. Auch das funktioniert wie gedacht.
# Variablen deklarieren
# Pfade festlegen
var_pdfout_path=mnt/unraid/Scan/Out
var_pdfpattern_path=mnt/unraid/Scan/config
# aktuelles Datum in Variable
var_date_now=$(date +%F)
# aktuelle Datei in Variable
var_current_file=$(ls $var_pdfout_path | grep .pdf -m 1)
# Testausgabe Variable
echo "$var_current_file"
# pdfgrep schreibe mir in die Variable aus der PDF Datei anhand von Schlagworten mit der Datei pdf_pattern
var_pdf_str=$(pdfgrep -f $var_pdfpattern_path/pdf_pattern $var_pdfout_path/$var_current_file --max-count 1)
# wenn mehrere Schlagworte gefunden, dampfe sie mir in eine Zeile lesbar zusammen
var_pdf_str=$(echo "$var_pdf_str" | xargs)
# Testausgabe Variable
echo "$var_pdf_str"
# baue mir den neuen Dateinamen zusammen
var_pdf_name="$var_date_now"_"$var_pdf_str".pdf
#Testausgabe Variable
echo "$var_pdf_name"
# benenne die aktualle Datei um
mv "$var_pdfout_path/$var_current_file" "$var_pdfout_path/$var_pdf_name"
# finde Datei mittels Teil von Dateinamen und schiebe sie in den passenden Ordner
find /mnt/unraid/Scan/Out/ -name "Vodafone" | xargs -I '{}' mv '{}' "/mnt/unraid/Scan/Rechnung Vodafone/$pdf_name"
# Pfade festlegen
var_pdfout_path=mnt/unraid/Scan/Out
var_pdfpattern_path=mnt/unraid/Scan/config
# aktuelles Datum in Variable
var_date_now=$(date +%F)
# aktuelle Datei in Variable
var_current_file=$(ls $var_pdfout_path | grep .pdf -m 1)
# Testausgabe Variable
echo "$var_current_file"
# pdfgrep schreibe mir in die Variable aus der PDF Datei anhand von Schlagworten mit der Datei pdf_pattern
var_pdf_str=$(pdfgrep -f $var_pdfpattern_path/pdf_pattern $var_pdfout_path/$var_current_file --max-count 1)
# wenn mehrere Schlagworte gefunden, dampfe sie mir in eine Zeile lesbar zusammen
var_pdf_str=$(echo "$var_pdf_str" | xargs)
# Testausgabe Variable
echo "$var_pdf_str"
# baue mir den neuen Dateinamen zusammen
var_pdf_name="$var_date_now"_"$var_pdf_str".pdf
#Testausgabe Variable
echo "$var_pdf_name"
# benenne die aktualle Datei um
mv "$var_pdfout_path/$var_current_file" "$var_pdfout_path/$var_pdf_name"
# finde Datei mittels Teil von Dateinamen und schiebe sie in den passenden Ordner
find /mnt/unraid/Scan/Out/ -name "Vodafone" | xargs -I '{}' mv '{}' "/mnt/unraid/Scan/Rechnung Vodafone/$pdf_name"
ist halt im Moment eher eine Ansammlung von Befehlen, womit ich mir gerne ein Script bauen mag, welche per cronjob jede Minute ausgeführt wird. Am liebsten wäre mir noch eine Abfrage am Anfang des Scripts, welche den Ordner überwacht und sobald eine PDF Datei dort auftaucht erst anläuft.
Für das Schreiben des Scripts bin ich noch zu doof.... quasi TILT im Hirn aktuell.
Ich bin schon mal froh, dass das Konstrukt an sich funktioniert, wenn auch nicht so flexibel wie ein DMS. Ein DMS wiederrum würde ich für mein Vorhaben eher als Overkill ansehen. Ich kann jeder Zeit meine Datei "pdf_pattern" mit meinen eigenen Schlagworten erweitern, welche dann aber nur neu dazu kommende Dateien berücksichtigen wird - soll für den Anfang erstmal reichen.
Ein paar Fragen habe ich jetzt:
1. ist der Inhalt aus dem Spoiler für ein Script brauchbar? weitere Ideen?
2. wie funktioniert das mit den Cronjobs? Ich habe bis Dato nie einen zum laufen bekommen
3. kann ich mittels UserScript unter unRaid in der Debian VM das Script anstoßen?
4. Ich bin einfach zu doof für Schleifen: Was wäre die beste Methode das Script am Anfang den Ordner "zu überwachen" und erst bei Eingang einer PDF-Datei los zu legen?
Ich hoffe mein Geschreibsel ist soweit verständlich. Wenn nicht, dann bitte ich um Nachfragen sowie konstruktives Feedback und eine rege Diskussion
Gruß
Chris