Verwenden Sie pdfinfo für mehrere PDFs und extrahieren Sie dann Dateinamen und Seitenzahl

Verwenden Sie pdfinfo für mehrere PDFs und extrahieren Sie dann Dateinamen und Seitenzahl

Ich habe Verzeichnisse (und Unterverzeichnisse) mit mehreren tausend PDFs und versuche, die Gesamtzahl der Seiten in all diesen PDFs zusammenzufassen. Also versuche ich, diesen Befehl auszuführen:

find . -name \*.pdf -exec pdfinfo {} \; | grep Pages > filelist

Und ich erhalte die Seitenzahl für jede in die filelistDatei eingespeiste Datei.

Ich würde wirklich gerne auch den Dateinamen einspeisen, weiß aber nicht, wie das geht ( pdfinfogibt viele Daten über das PDF zurück, aber nicht den Dateinamen selbst).

Antwort1

Stellen Sie voran -exec. -printAuf diese Weise wird der Pfadname von ausgedruckt, findbevor der jeweilige pdfinfoBefehl seine Ausgabe ausgibt. -printist die Standardaktion (z. B. wenn Sie sole ausführen find .), aber die Anwesenheit von -execunterdrückt die Standardaktion.

Wenn Sie den Pfadnamen nach der jeweiligen Ausgabe bevorzugen, pdfinfokönnen Sie versuchen -exec … -print, aber beachten Sie, dass in diesem Fall -printausgeführt wird, wenn -exec(dh pdfinfo) erfolgreich ist. Im Allgemeinen verwendet man, -exec … -printwenn -execals Test verwendet wird. Im Kontext Ihrer Frage bevorzuge ich persönlich den Pfadnamen zuerst, also -print -exec ….

Dann müssen Sie Ihre anpassen grep. Machen Sie sich die Tatsache zunutze, dass jeder von berücksichtigte Pfadname find .mit beginnen muss .. grep -E '^(\.|Pages)'stimmt mit Zeilen überein, die am Anfang einen wörtlichen Punkt oder den String Pagesam Anfang haben.

Der endgültige Befehl lautet:

find . -name \*.pdf -print -exec pdfinfo {} \; | grep -E '^(\.|Pages)'

(leiten Sie die Ausgabe selbst um).

Betrachten Sie dies -type fals ersten Test für den Fall, dass einige nicht regelmäßigeDateiÜbereinstimmungen werden nach dem Zufallsprinzip ermittelt. Dadurch wird das Aufrufen von Verzeichnissen und dergleichen -name \*.pdfvermieden .pdfinfo

verwandte Informationen