Batch-Umbenennung von PDF-Dateien nach Inhalt

0

Ich habe einen großen Stapel von PDFs und möchte diese nach Inhalt stapelweise umbenennen. (Sie sind alle durchsuchbar). Und ich möchte dazu die Befehlszeilenschnittstelle verwenden.

Sie sind alle Gehaltsabrechnungen, haben also eine konstante Form und ich möchte sie nach Datum umbenennen.

Derzeit heißen sie: payslip100 .. payslip308

Die Zeichenfolge zum Umbenennen ist die Datumskomponente in Payment Date: 15/4/2016

Ich habe pdfgrep mit home-brew installiert und suche mit pdfgrep -HC 15 "Payment Date:" paySlip.pdf

was zurückkehrt paySlip.pdf:Payment Date: 8/7/2016


Ich habe meinen endgültigen Arbeitscode in einer Antwort angehängt.

watermelon
quelle
Wie führen Sie eine Suche in PDFs durch?
techraf
Mir ist gerade aufgefallen, dass ich den Inhalt der PDF-Datei mit mdfind durchsuchen kann. Dadurch erhalte ich eine Liste der Dateien, die eine bestimmte Zeichenfolge enthalten. mdfind annual -onlyin ./ Grep gibt jedoch keine Ergebnisse aus derselben Suche aus. grep annual *.*
watermelon
Aktualisieren Sie daher Ihre Frage mit dem von Ihnen ausgeführten Befehl und dessen Ergebnissen für eine Reihe von Dateien. Dann können wir Befehle hinzufügen, um die Dateien umzubenennen.
techraf
Dies ist ein langer Schuss. Was sind die Ergebnisse grep --binary-files=text 'Payment Date:' file.pdf? Woher file.pdf ist eine einzelne PDF-Datei, die Sie durchsuchen möchten.
fd0
grep --binary-files=text 'Payment Date:' file.pdf hilft nicht. Ich denke darüber nach, pdftotext auszuprobieren, das ich anscheinend mit Home-Brew installieren kann. apple.stackexchange.com/questions/155250/… .
watermelon

Antworten:

1

Nach einigen Anstrengungen bin ich zu einem nützlichen Ergebnis gekommen !! sed syntax ist ziemlich verwirrend und ich bin ziemlich glücklich, in einem Zustand zu existieren, in dem es funktioniert, ohne genau zu wissen warum.

#!/bin/bash
for file in *.pdf
do
    # return file name and date in form "Payment Date:   8/7/2016"
    date=$(pdfgrep -C 15 "Payment Date:" "$file")
    echo $date

    # now replace / with - to make naming file easier
    date2=$(echo "$date" | sed 's,/,-,g')
    echo $date2

    # use date string to rename : YYYY-mm-payslip-dd-mm-YYYY.pdf
    new=$(echo "$date2" | sed 's,\Payment Date:\ *\(.*\)-\(.*\)-\(.*\),\3-\2-\payslip-\1-\2-\3.pdf,')
    echo mv "$file" "$new"
done

Ich habe pdfgrep verwendet, das mit Homebrew installiert wurde (gefunden bei einer anderen Antwort, die ich momentan nicht finde).

Ich musste "/" für den Dateinamen ändern. Die Verwendung des Schrägstrichs als sed-Syntax ist nicht erforderlich und kann durch andere Zeichen ersetzt werden. Verwenden Sie daher "," anstelle von "/". https://stackoverflow.com/questions/17379293/replace-forward-slash-with-double-backslash-enclosed-in-double-quotes

Ich fand, dass es variable Räume in $ date gab, die das erforderten ..Payment Date:\ *\...

Ich habe das Jahr und den Monat zum Beginn des Dateinamens hinzugefügt, um die Organisation zu vereinfachen.

watermelon
quelle