Wie konvertiere ich alle PDF-Dateien mit einem Befehl in Text (innerhalb eines Ordners)?

18

Ich weiß, dass ich PDF-Dateien wie folgt nacheinander in Textdateien konvertieren kann:

$ pdftotext filename.pdf

Aber gibt es einen einzigen Befehl, der diese Konvertierung durchführen würde, ohne separate Dateinamen anzugeben, um sie alle zu konvertieren?

Ich sehe hier auf Wikipedia , dass "Wildcards (*), zum Beispiel $ pdftotext * pdf, zum Konvertieren mehrerer Dateien nicht verwendet werden können, da pdftotext nur einen Dateinamen erwartet."


quelle

Antworten:

23

Das Folgende konvertiert alle Dateien im aktuellen Verzeichnis:

for file in *.pdf; do pdftotext "$file" "$file.txt"; done
Sam
quelle
als einziger befehl kann er in einer zeile im terminal eingegeben werden (der pdftotext innerhalb einer for-schleife in einer einzeiligen syntax, nach der die op gefragt hat)
sam
Weitere Informationen zur Funktionsweise der for-Schleife finden Sie unter folgenden Links : cyberciti.biz/faq/bash-for-loop thegeekstuff.com/2011/07/bash-for-loop-examples
Sam
Würde dies nicht zu Problemen mit Nicht-PDF-Dateien führen?
Profitieren Sie vom
Würde dies nicht zu Dateien wie "filename.pdf.txt" führen?
Ryan C. Thompson
Ja, wenn das ein Problem ist, könnten wir die .pdf-Erweiterung mit 'sed' oder 'awk' entfernen, aber dies würde den Befehl komplexer machen
Sam
8
ls *.pdf | xargs -n1 pdftotext

xargsist oft eine schnelle Lösung, um den gleichen Befehl mehrmals mit nur einer kleinen Änderung jedes Mal auszuführen. Die -n1Option stellt sicher, dass jeweils nur eine PDF-Datei an pdftotext übergeben wird.

Bearbeiten: Wenn Sie sich Gedanken über Leerzeichen in Dateinamen machen, können Sie diese Alternative verwenden:

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
Ryan C. Thompson
quelle
Bitte sehen Sie meine Antwort: Kann dieser Befehl angepasst werden, um das dort erwähnte Problem zu vermeiden? Das bedeutet nicht, dass Ihre Lösung nicht gut ist, im Gegenteil, sie macht etwas sehr Spezifisches, was die anderen Alternativen hier nicht tun. aber ich war nur neugierig
2
Alternativ:ls *.pdf | xargs -L1 -I% pdftotext % %.txt
Kenorb
2

Schreiben Sie ein Bash-Skript

for f in *.pdf; do
  pdftotext "$f"
done

oder geben Sie es in einem einzeiligen Befehl wie folgt ein:

for f in *.pdf; do pdftotext "$f"; done

Ich hoffe das hilft. Ich habe keine große Gruppe von .pdfs, um dies zu testen, aber ich verwende diese Strategie, um meine .flac-Dateien in .ogg-Dateien zu konvertieren.

cprofitt
quelle
Kann man das Terminal in diesem Ordner öffnen und einen Befehl ausführen, anstatt den Pfad manuell einzufügen?
Könntest du es nicht als solches hier einfügen und in deine Antwort einfügen? das wäre eine gute antwort. Ich war nicht in der Lage, die gute Formel zu erreichen, indem ich nur einen Teil von dem löschte, was Sie gepostet haben
Der von mir ursprünglich vorgeschlagene Fund und die Xargs funktionierten nicht, als ich die Gelegenheit bekam, sie zu testen.
cprofitt
1

Ich muss zunächst Sam und Ryan Thompson sowie allen anderen Antwortenden danken - für meine Antwort hier ist nichts anderes als eine Variation in Bezug auf die Möglichkeit, ihre Lösungen zu Thunars benutzerdefinierten Aktionen hinzuzufügen:

Wie bei jedem Terminalbefehl kann ein Befehl zum Konvertieren aller PDF-Dateien in einem Ordner in die Liste der benutzerdefinierten Aktionen im Thunar-Dateimanager eingefügt werden

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Der Befehl dort ist find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext(von Ryan Thompson kommend ) der, den ich am liebsten benutze, aber er hat eine böse Wendung ... siehe unten ...

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

... es ist ein lustiger Befehl, der mit Bedacht verwendet werden muss: Er wird erstellt, um alle PDF-Dateien in dem Ordner, in dem er abgelegt wurde, in Text umzuwandeln effekte: alle deine pdfs werden in text konvertiert!

(Ich habe es so getestet: habe einen Ordner namens "test" auf dem Desktop erstellt und darin eine PDF-Datei und eine Reihe von Ordnern innerhalb von Ordnern ( /Desktop/test/a/b/c/e/f/g/h/i), die jeweils dasselbe PDF enthalten. Wenn Sie diesen Befehl in /Desktop/testausführen, werden alle PDFs in das PDF-Format konvertiert "i" Ordner.)

(Ich würde es begrüßen, wenn Sie Kommentare dazu abgeben, wie Sie diesen Befehl anpassen, um dieses Risiko zu vermeiden.)

Wenn Sie dies durch das andere ( for file in *.pdf; do pdftotext "$file" "$file.txt"; done) von Sam ersetzen, wird das Problem vermieden.

In bestimmten Fällen könnte man sich genau wünschen, was Ryans Lösung bewirkt!

Gemeinschaft
quelle
1
Sie können die findBefehlssuche in Unterverzeichnissen vermeiden, indem Sie verwenden -maxdepth 1. Auch wenn es in Thunar der benutzerdefinierten Aktionen Funktion setzen, sollten Sie wahrscheinlich ersetzen find .mit find %Fzu Thunar ermöglichen, die Pfade der ausgewählten Verzeichnisse übergeben.
Ryan C. Thompson
0
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

Dieser gibt sample.pdf.txt aus .

Ich habe versucht, diesen zu verwenden, wie von user2357111317 vorgeschlagen, und ich füge auch -layout hinzu , um das Layout des Texts beizubehalten

for file in *.pdf; do pdftotext -layout "$file"; done
pingelig
quelle