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 filelist
Datei eingespeiste Datei.
Ich würde wirklich gerne auch den Dateinamen einspeisen, weiß aber nicht, wie das geht ( pdfinfo
gibt viele Daten über das PDF zurück, aber nicht den Dateinamen selbst).
Antwort1
Stellen Sie voran -exec
. -print
Auf diese Weise wird der Pfadname von ausgedruckt, find
bevor der jeweilige pdfinfo
Befehl seine Ausgabe ausgibt. -print
ist die Standardaktion (z. B. wenn Sie sole ausführen find .
), aber die Anwesenheit von -exec
unterdrückt die Standardaktion.
Wenn Sie den Pfadnamen nach der jeweiligen Ausgabe bevorzugen, pdfinfo
können Sie versuchen -exec … -print
, aber beachten Sie, dass in diesem Fall -print
ausgeführt wird, wenn -exec
(dh pdfinfo
) erfolgreich ist. Im Allgemeinen verwendet man, -exec … -print
wenn -exec
als 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 Pages
am 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 f
als 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 \*.pdf
vermieden .pdfinfo