105 lines
3.4 KiB
Bash
105 lines
3.4 KiB
Bash
#!/bin/bash
|
|
# ./recursive_inputdir_workflow.sh
|
|
# Tutorial: https://www.synology-forum.de/threads/synocr-gui-fuer-ocrmypdf.99647/post-879535
|
|
# Dieses Skript hilft dabei, einmalig OCR auf eine hirachische Verzeichnisstrucktur mit PDF-Dateien anzuwenden
|
|
|
|
# hier sind die absoluten Pfade (beginnen meist mit /volume… ) zwischen den Anführungszeichen anzugeben
|
|
# Quellverzeichnisstruktur:
|
|
SOURCEPARENTDIR=""
|
|
# Eingangsverzeichnis für synOCR:
|
|
SYNOCR_INPUT=""
|
|
# Ausgabeverzeichnis für synOCR:
|
|
SYNOCR_OUTPUT=""
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
# HOW TO
|
|
|
|
# ! ! ! BITTE ZUNÄCHST EIN BACKUP DEINES QUELLORDNERS ANLEGEN ! ! !
|
|
# ! ! ! es empfiehlt sich ein Test mit einer Beispielverzeichnisstruktur ! ! !
|
|
|
|
# 1.)
|
|
# Dieses Skript (die 3 Ordnervariablen müssen angepasst werden)
|
|
# ➜ durchsucht alle Verzeichnisse des angegebenen Ordners nach PDF-Dateien
|
|
# ➜ verschiebt diese in den angegebenen synOCR-INPUT-Ordner
|
|
# ➜ versieht diese mit einer ID
|
|
# ➜ und erstellt eine Indexdatei
|
|
|
|
# 2.)
|
|
# Nach dem ersten Aufruf lässt man synOCR seine Arbeit machen
|
|
# WICHTIG: synOCR-Profil ohne Umbenennungssyntax und Einsortierung in regeldefinierte
|
|
# Ordner, d.h. alle fertigen PDFs liegen im synOCR OUTPUT-Ordner
|
|
|
|
# 3.)
|
|
# Das Skript muss jetzt erneut aufgerufen werden
|
|
# ➜ es erkennt die vorhandene Indexdatei
|
|
# ➜ verschiebt die fertigen PDFs an ihren Urspungsort
|
|
# ➜ entfernt die ID aus dem Dateinamen
|
|
# ➜ und benennt die Indexdatei um
|
|
|
|
# 4.)
|
|
# be happy :-)
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
# ab hier nichts mehr ändern |
|
|
#----------------------------------------------------------------------
|
|
|
|
preprocess() {
|
|
# verschiebe Quelldateien nach SYNOCR_INPUT:
|
|
IFS=$'\012'
|
|
for i in $(find "${SOURCEPARENTDIR}" -iname "*.pdf" -type f); do
|
|
IFS=$OLDIFS
|
|
FILEPATH=$(dirname "$i")
|
|
FILENAME=$(basename "$i")
|
|
ID="$(date +%s%N)_"
|
|
|
|
# erstelle Indexeintrag:
|
|
echo "${ID}§_§${FILEPATH}§_§${FILENAME}" >> "$INDEXFILE"
|
|
|
|
# verschiebe Quelldatei:
|
|
mv "$i" "${SYNOCR_INPUT}${ID}${FILENAME}"
|
|
done
|
|
}
|
|
|
|
postprocess() {
|
|
# verarbeitete Dateien zurücksortieren:
|
|
cat "$INDEXFILE" | while read data ; do
|
|
FILEPATH=$(echo $data | awk -F'§_§' '{print $2}')
|
|
FILENAME=$(echo $data | awk -F'§_§' '{print $3}')
|
|
ID=$(echo $data | awk -F'§_§' '{print $1}')
|
|
|
|
FILEHOME="${FILEPATH}/${FILENAME}"
|
|
OCRFILE=$( find "${SYNOCR_OUTPUT}" -iname "${ID}*.pdf" )
|
|
mv "$OCRFILE" "$FILEHOME"
|
|
done
|
|
|
|
mv "$INDEXFILE" "${INDEXFILE}_finish"
|
|
}
|
|
|
|
OLDIFS=$IFS
|
|
|
|
APPDIR=$(cd $(dirname $0);pwd)
|
|
|
|
if [ ! -d "$SOURCEPARENTDIR" ] || [ ! -d "$SYNOCR_INPUT" ] || [ ! -d "$SYNOCR_OUTPUT" ] ; then
|
|
echo "Pfad ungültig!"
|
|
exit
|
|
fi
|
|
|
|
SOURCEPARENTDIR="${SOURCEPARENTDIR%/}/"
|
|
SYNOCR_INPUT="${SYNOCR_INPUT%/}/"
|
|
SYNOCR_OUTPUT="${SYNOCR_OUTPUT%/}/"
|
|
|
|
INDEXFILE="$(cd $(dirname $0);pwd)/multidir_workflow_INDEX.txt"
|
|
|
|
if [ ! -f "$INDEXFILE" ] ; then
|
|
# backup, damit durch erneutes Starten nicht die bisherigen IDs gelöscht werden
|
|
touch "$INDEXFILE"
|
|
echo "Index wird erstellt ➜ verschiebe Dateien in den Arbeitsordner"
|
|
preprocess
|
|
else
|
|
echo "Index bereits vorhanden ➜ sortiere verarbeitete Dateien zurück"
|
|
postprocess
|
|
fi
|
|
|