bc-nero
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
Hallo! Ich komme leider nicht weiter und brauche eure Hilfe. Ich muss aus unserer WaWi Rechnungen umbennen. Sie Wawi benennt diese nur mit einer ID, ich brauche aber den Dateinamen "Bestellnummer.pdf". Das hier habe ich gefunden: https://gist.github.com/jcttrll/26b9b96253c5c654141399039fb528a2 , hier ging es aber wohl um das Datum für den Dateinamen. Zum Test habe ich den Bereich mal auf das Rechnungsdatum geändert und ausgeführt (Das PDF liegt im gleichen Ordner) Leider passiert da nichts. Habt Ihr eine Idee wie ich:
den PDF-Dateinamen mit der Bestellnummer geändert bekomme das Original in einen Subfolder "orginal" verschiebe das geänderte File in den Subfolder "upload" verschiebe?
Bin über jede Hilfe dankbar DANKE!! SG Thomas Bearbeitet von rklm: Aufzählung. Bitte beachte Forum/Syntax und nutze die Vorschaufunktion!
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
bc-nero schrieb: Hallo! Ich komme leider nicht weiter und brauche eure Hilfe. Ich muss aus unserer WaWi Rechnungen umbennen. Sie Wawi benennt diese nur mit einer ID, ich brauche aber den Dateinamen "Bestellnummer.pdf".
Das liegt doch hoffentlich alles in einer relationalen Datenbank - kannst du da keine DB-Abfrage machen, die die Assoziation zwischen Bestellnummer und der ID zeigt? Das hier habe ich gefunden: https://gist.github.com/jcttrll/26b9b96253c5c654141399039fb528a2 , hier ging es aber wohl um das Datum für den Dateinamen. Zum Test habe ich den Bereich mal auf das Rechnungsdatum geändert und ausgeführt (Das PDF liegt im gleichen Ordner) Leider passiert da nichts.
Hast du dem Skript die PDF-Datei(en) als Argument mitgegeben? Ich würde da ja erwarten die Fehlermeldung aus Zeile 29 zu sehen, wenn er soweit kommt, dass das OCR Zeichen liefert, aber kein gültiges Datum vorliegt.
Habt Ihr eine Idee wie ich:
1) den PDF-Dateinamen mit der Bestellnummer geändert bekomme
Das Suchen nach einem Datum durch die Suche nach einer Bestellnummer ersetzen und den printf-Befehl und das darin genutzte Template anpassen. 2) das Original in einen Subfolder "orginal" verschiebe
Siehe mv und mkdir 3) das geänderte File in den Subfolder "upload" verschiebe?
Siehe 2) Hast du eventuell ein bis auf die Bestellnummer anonymisiertes Beispiel-PDF und deine bisherigen Änderungen an dem Skript?
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
Hi, danke für die schnelle Antwort!
Das liegt doch hoffentlich alles in einer relationalen Datenbank - kannst du da keine DB-Abfrage machen, die die Assoziation zwischen Bestellnummer und der ID zeigt?
Leider nein, da komme ich nicht ran und ein Modul / Tool gibt es leider auch nicht. Leider ist mein Wissen recht beschränkt, eher "try & error" - sorry. Die Koordinaten zum Testen auf ein Datum NEU: auf die Bestellnummer sollten passen, der Rest sagt mir leider wenig. Aber ich brauche hier die Bestellnummer. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | #/bin/bash
set -o pipefail
REGION_X=1925
REGION_Y=900
REGION_WIDTH=1000
REGION_HEIGHT=50
RENAME_PATTERN='foo-%s.pdf'
for file in "$@"; do
declare date=$(
convert -crop "${REGION_WIDTH}x${REGION_HEIGHT}+${REGION_X}+${REGION_Y}" \
-density 300 -black-threshold 0.3 "$file" png:- |
tesseract stdin stdout 2>/dev/null |
grep -oP '\d[\s\d]*/[\d\s]+/[\d\s]+' |
tr -d ' ' |
awk -F/ '$3 < 100{$3 += 2000}{print $3 "-" $1 "-" $2}'
)
if [ -n "$date" ] && date -d "$date" >/dev/null; then
rename=$(printf "$RENAME_PATTERN" "$date")
if [ -e "$rename" ]; then
echo "Error: $rename would be overwritten; skipping" >&2
else
mv -vn "$file" "$rename"
fi
else
echo "Error detecting date of $file; skipping" >&2
fi
done
|
Bearbeitet von rklm: Syntaxhighlighting
- test-.pdf (704.7 KiB)
- Download test-.pdf
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
So, per "try & error" habe ich erkannt, dass "convert" ein Problem mit PDF to PNG hat. Dazu musste ich für ImageMagick die Datei: /etc/ImageMagick-6/policy.xml von
<policy domain="coder" rights="none" pattern="PDF" /> auf
<policy domain="coder" rights="read|write" pattern="PDF" /> ändern. Der "convert" klappt als einzelner Befehl im Terminal, das komplette bash leider noch immer nicht ☹
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Probier es mal damit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 | #/bin/bash
set -o pipefail
REGION_X=1925
REGION_Y=900
REGION_WIDTH=1000
REGION_HEIGHT=50
for file in "$@"; do
base_dir=$(dirname "$(realpath "$file")")
original_dir="${base_dir}/original"
upload_dir="${base_dir}/upload"
mkdir -p "$original_dir"
mkdir -p "$upload_dir"
declare order_number=$(
convert -crop "${REGION_WIDTH}x${REGION_HEIGHT}+${REGION_X}+${REGION_Y}" \
-density 300 -black-threshold 0.3 "$file" png:- |
tesseract stdin stdout 2>/dev/null |
grep -oP '\d+'
)
if [ -n "$order_number" ]
then
rename_target="${upload_dir}/${order_number}.pdf"
original_copy="${original_dir}/${file}"
if [ -e "$rename_target" ]
then
echo "Error: $rename_target would be overwritten; skipping" >&2
elif [ -e "$original_copy" ]
then
echo "Error: $original_copy would be overwritten; skipping" >&2
else
cp -v "$file" "$original_copy"
mv -vn "$file" "$rename_target"
fi
else
echo "Error detecting order number in $file; skipping" >&2
fi
done
|
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
EIN TRAUM! Das funktioniert, wenn ich "./ocr-rename.sh test.pdf" aufrufe bezogen auf test.pdf, kann man das noch als Schleife machen, damit es mehrere PDFs umwandeln kann? ./ocr-rename.sh *.pdf ist die Lösung! VIELEN DANK nochmals!!! Ich werde mal versuchen die Lösung zu verstehen, man lernt ja hoffentlich nie aus ☺
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
Hi, ein "kleines" Problem hab ich noch mit dem Script, es will leider nicht als Cron laufen. Wenn ich zum Test: env -i /home/user/ocr-rename.sh *.pdf laufen lasse, dann bekomme ich diese Fehlermeldung: 2: set: Illegal option -o pipefail Gibt es hier noch einen Tipp?
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4391
Wohnort: Göttingen
|
Hm, ich würde sagen, die Shebang, also die erste Zeile ist falsch. Die muss so aussehen:
#!/bin/bash
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
bc-nero schrieb: Hi, ein "kleines" Problem hab ich noch mit dem Script, es will leider nicht als Cron laufen. Wenn ich zum Test: env -i /home/user/ocr-rename.sh *.pdf laufen lasse, dann bekomme ich diese Fehlermeldung: 2: set: Illegal option -o pipefail Gibt es hier noch einen Tipp?
Ubuntu nutzt als Standard-Shell die dash, die weniger Funktionalität bietet als die bash und wie Doc_Symbiosis schon richtig bemerkt hat, hatte meine die Tastatur ein Zeichen im Shebang verschluckt, so dass das Skript mit der dash statt der bash ausgeführt wird.
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
Hi, danke! Mit "#!/bin/bash" ist die Fehlermeldung weg, aber als cron läuft das trotzdem nicht Ich hatte es als root im Cron und als normaler user eingetragen, unter /home/user/ und unter /usr/bin/ gespeichert (Pfade in ocr-rename.sh angepasst) so will es nicht: 29 12 * * 1,2,3,4,5,6 /home/user/ocr-rename.sh *.pdf # JOB_ID_1 und aus /usr/bin/ wollte es auch nicht 29 12 * * 1,2,3,4,5,6 cd /home/user/ && ./ocr-rename.sh *.pdf # JOB_ID_1
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Probier es mal so:
29 12 * * 1,2,3,4,5,6 sh -c '/home/user/ocr-rename.sh /home/user/*.pdf'
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
war es leider doch noch nicht, per cron kommt ein Fehler beim Kopieren in den /original Ordner '/home/user/209680_191171.pdf' → '/home/user/original//home/user/209680_191171.pdf'
cp: reguläre Datei '/home/user/original//home/user/209680_191171.pdf' kann nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Ah, da muss noch der Pfad für die Zieldatei raus (Zeile 26): 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 | #!/bin/bash
set -o pipefail
REGION_X=1925
REGION_Y=900
REGION_WIDTH=1000
REGION_HEIGHT=50
for file in "$@"; do
base_dir=$(dirname "$(realpath "$file")")
original_dir="${base_dir}/original"
upload_dir="${base_dir}/upload"
mkdir -p "$original_dir"
mkdir -p "$upload_dir"
declare order_number=$(
convert -crop "${REGION_WIDTH}x${REGION_HEIGHT}+${REGION_X}+${REGION_Y}" \
-density 300 -black-threshold 0.3 "$file" png:- |
tesseract stdin stdout 2>/dev/null |
grep -oP '\d+'
)
if [ -n "$order_number" ]
then
rename_target="${upload_dir}/${order_number}.pdf"
original_copy="${original_dir}/$(basename "file")"
if [ -e "$rename_target" ]
then
echo "Error: $rename_target would be overwritten; skipping" >&2
elif [ -e "$original_copy" ]
then
echo "Error: $original_copy would be overwritten; skipping" >&2
else
cp -v "$file" "$original_copy"
mv -vn "$file" "$rename_target"
fi
else
echo "Error detecting order number in $file; skipping" >&2
fi
done
|
|
bc-nero
(Themenstarter)
Anmeldungsdatum: 30. Mai 2013
Beiträge: 52
|
nur der cron wird doch nicht gestartet. | 29 12 * * 1,2,3,4,5,6 sh -c '/home/user/ocr-rename.sh /home/user/*.pdf'
|
um 13:05 hab ich wohl von dem Test mit "env -i" täuschen lassen ...
|