Wie kann ich den Inhalt von PDF-Dateien in einem Verzeichnis / Unterverzeichnis durchsuchen? Ich suche einige Kommandozeilen-Tools. Es scheint, dass grepPDF-Dateien nicht durchsucht werden können.
Das "-" ist erforderlich, damit pdftotext in stdout und nicht in Dateien ausgegeben wird. Das--with-filename--label= Optionen und wird der Dateiname in die Ausgabe von grep eingefügt. Das optionale --colorFlag ist nett und weist grep an, mit Farben auf dem Terminal auszugeben.
(In Ubuntu, pdftotext wird durch das Paket xpdf-utilsoder bereitgestellt poppler-utils.)
Diese Methode mit pdftotextund grephat einen Vorteil gegenüber pdfgrepder Verwendung von Funktionen von GNU grep, pdfgrepdie nicht unterstützt werden. Hinweis : pdfgrep-1.3.x unterstützt die -COption zum Drucken von Kontextzeilen.
@Kurt Pfeifle Die von Ihnen vorgenommene Bearbeitung "(Edit by -kp-)" funktioniert nicht, da grepdie gedruckten Dateinamen gefiltert werden.
Raphael Ahrens
@sjr nein, obwohl die pdfgrepLösung für wirklich schnelle und einfache Suchen gut ist, möchte ich oft einen Kontext erhalten, da eine einzelne Zeile nicht hilfreich genug ist - also habe ich zu dieser Antwort hinzugefügt: Zum Beispiel können Sie hinzufügen die Option -C5 vor "Ihrem Muster", um 5 Kontextzeilen in die Ausgabe aufzunehmen - pdfgrep unterstützt dies nicht
Colin D Bennett
oh das ist cool, froh zu wissen, dass es Vorteile gibt, obwohl es für die meisten Leute viel weniger offensichtlich ist, wenn es tut
sjr
2
@sjr Nur zur Veranschaulichung: Ich verwende Ubuntu 12.10 und es pdfgrepist nutzlos. Es meldet eine enorme Menge an Müll auf Dateien, die es nicht verarbeiten kann. Ihre Lösung hat andererseits geholfen. Also bitte nicht löschen, auch nach 3 Jahren ist es noch hilfreich!
Ali
Ich konnte es auch in Cygwin verwenden, obwohl ich es zu einer Funktion mit dem Parameter machen musste, musste ich das "your_pattern" zu '$ 1' machen
Koshmaar
214
Es gibt pdfgrep , das genau das tut, was sein Name andeutet.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Ich habe es für einfache Suchen verwendet und es hat gut funktioniert.
(Es gibt Pakete in Debian, Ubuntu und Fedora.)
Seit Version 1.3.0 unterstützt pdfgrep die rekursive Suche. Diese Version ist in Ubuntu seit Ubuntu 12.10 (Quantal) verfügbar.
@pavon pdfgrephat jetzt diese Rekursionsoption, einschließlich, -Rum auch Symlinks zu folgen
Tobias Kienzler
30
Recoll ist eine fantastische Volltext-GUI- Suchanwendung für Unix / Linux, die Dutzende verschiedener Formate unterstützt, einschließlich PDF. Es kann sogar die genaue Seitenzahl und den Suchbegriff einer Abfrage an den Dokumentbetrachter übergeben und ermöglicht es Ihnen, direkt über die GUI zum Ergebnis zu springen.
Recoll verfügt außerdem über eine funktionsfähige Befehlszeilenschnittstelle und eine Webbrowser-Oberfläche .
@Glutanimate Es wäre hilfreich (ich und möglicherweise auch andere), wenn Sie ein Beispiel für die ursprüngliche Frage hinzufügen könnten (Befehlszeilentool für die Suche in mehreren PDFs): Ich würde auch gerne sehen, wie eine Platzhaltersuche durchgeführt wird und wie gesucht wird das aktuelle Verzeichnis einschließlich aller Unterverzeichnisse . Wie würde das recoll / xapianin der Kommandozeile aussehen (ohne GUI)? Vielen Dank!
verrückt über natty
@ LeszekŻarna Vielleicht könntest du das Beispiel posten, das du getestet hast?
verrückt über natty
Das recollBenutzerhandbuch enthält möglicherweise einige Hinweise, bietet jedoch eine eher technische und "nicht
themenbezogene
1
@nutty: recoll -t -q dir: pwdext: pdf 'neuro *' - Stackoverflow hat die Backticks um pwd gefressen.
Medoc
13
Meine aktuelle Version von pdfgrep (1.3.0) erlaubt Folgendes:
pdfgrep -HiR 'pattern' /path
Wenn Sie pdfgrep --help:
H: Drucken Sie den Dateinamen für jede Übereinstimmung.
+1. Aber statt dem $filename.solltest du es einpfeifen grep.
Raphael Ahrens
3
Ich mag die Antwort von @ sjr, aber ich bevorzuge xargs vs -exec. Ich finde Xargs vielseitiger. Zum Beispiel können wir mit -P mehrere CPUs nutzen, wenn dies sinnvoll ist.
interessanter Punkt über xargs'Parallelverarbeitungsfähigkeit. Beachten Sie, dass Ihr --labelOptionsargument buchstäblich lautet {}, da der grepBefehl jetzt nicht mehr im Kontext von find's ausgeführt wird exec.
mklement0
2
Ich hatte das gleiche Problem und schrieb daher ein Skript, das alle PDF-Dateien im angegebenen Ordner nach einer Zeichenfolge durchsucht und die PDF-Dateien druckt, die mit der Abfragezeichenfolge übereinstimmen.
Vielleicht nützlich, um das Skript in den Kommentar einzufügen?
Baxx
Ich habe Ihr Skript ausprobiert und es stellt sich heraus, dass es viel langsamer als die pdfgrepLösung oder der Einzeiler von sjr ist, und es hat mir einen laufenden Prozess hinterlassen, bei dem 100% eines CPU-Threads verwendet werden, selbst nachdem ich Strg-C zum Beenden verwendet habe.
Jason
2
Wenn Sie Dateinamen mit pdftotext anzeigen möchten, verwenden Sie den folgenden Befehl:
Es gibt ein Open-Source- Grep- Tool für allgemeine Ressourcen, crgrep das in PDF-Dateien sucht, aber auch in anderen Ressourcen wie in Archiven verschachtelten Inhalten, Datenbanktabellen, Bild-Metadaten, POM-Dateiabhängigkeiten und Webressourcen - und Kombinationen davon, einschließlich rekursiver Suche.
Die vollständige Beschreibung auf der Registerkarte "Dateien" deckt weitgehend ab, was das Tool unterstützt.
Craig - hast du eine Verbindung zu diesem Projekt? Wenn ja, sollten Sie dies in Ihrer Antwort angeben. Ich sage das, weil Sie gerade eine praktisch identische Antwort auf zwei andere alte Fragen gepostet haben ...
Stephen C
Aktualisierter Beitrag, um zu verdeutlichen, dass ich der Autor von crgrep bin
Craig
1
Konvertieren Sie zuerst alle Ihre PDF-Dateien in Textdateien:
for file in *.pdf;do pdftotext "$file"; done
Dann grepwie gewohnt verwenden. Dies ist besonders gut, da es schnell ist, wenn Sie mehrere Abfragen und viele PDF-Dateien haben.
Dies geschieht in Kombination mit aggithub.com/ggreer/the_silver_searcher . Kann Psychedeliks Gb in Mikrosekunden analysieren. Flat Files fürs Leben
NVRM
0
Sie benötigen einige Tools wie pdf2text, um Ihr PDF zuerst in eine Textdatei zu konvertieren und dann im Text zu suchen. (Sie werden wahrscheinlich einige Informationen oder Symbole vermissen).
Wenn Sie eine Programmiersprache verwenden, sind wahrscheinlich PDF-Bibliotheken für diesen Zweck geschrieben. zB http://search.cpan.org/dist/CAM-PDF/ für Perl
Antworten:
Ihre Distribution sollte ein Hilfsprogramm namens enthalten
pdftotext
:Das "-" ist erforderlich, damit pdftotext in stdout und nicht in Dateien ausgegeben wird. Das
--with-filename
--label=
Optionen und wird der Dateiname in die Ausgabe von grep eingefügt. Das optionale--color
Flag ist nett und weist grep an, mit Farben auf dem Terminal auszugeben.(In Ubuntu,
pdftotext
wird durch das Paketxpdf-utils
oder bereitgestelltpoppler-utils
.)Diese Methode mit
pdftotext
undgrep
hat einen Vorteil gegenüberpdfgrep
der Verwendung von Funktionen von GNUgrep
,pdfgrep
die nicht unterstützt werden. Hinweis : pdfgrep-1.3.x unterstützt die-C
Option zum Drucken von Kontextzeilen.quelle
grep
die gedruckten Dateinamen gefiltert werden.pdfgrep
Lösung für wirklich schnelle und einfache Suchen gut ist, möchte ich oft einen Kontext erhalten, da eine einzelne Zeile nicht hilfreich genug ist - also habe ich zu dieser Antwort hinzugefügt: Zum Beispiel können Sie hinzufügen die Option -C5 vor "Ihrem Muster", um 5 Kontextzeilen in die Ausgabe aufzunehmen - pdfgrep unterstützt dies nichtpdfgrep
ist nutzlos. Es meldet eine enorme Menge an Müll auf Dateien, die es nicht verarbeiten kann. Ihre Lösung hat andererseits geholfen. Also bitte nicht löschen, auch nach 3 Jahren ist es noch hilfreich!Es gibt pdfgrep , das genau das tut, was sein Name andeutet.
Ich habe es für einfache Suchen verwendet und es hat gut funktioniert.
(Es gibt Pakete in Debian, Ubuntu und Fedora.)
Seit Version 1.3.0 unterstützt pdfgrep die rekursive Suche. Diese Version ist in Ubuntu seit Ubuntu 12.10 (Quantal) verfügbar.
quelle
pdfgrep
hat jetzt diese Rekursionsoption, einschließlich,-R
um auch Symlinks zu folgenRecoll ist eine fantastische Volltext-GUI- Suchanwendung für Unix / Linux, die Dutzende verschiedener Formate unterstützt, einschließlich PDF. Es kann sogar die genaue Seitenzahl und den Suchbegriff einer Abfrage an den Dokumentbetrachter übergeben und ermöglicht es Ihnen, direkt über die GUI zum Ergebnis zu springen.
Recoll verfügt außerdem über eine funktionsfähige Befehlszeilenschnittstelle und eine Webbrowser-Oberfläche .
quelle
recoll / xapian
in der Kommandozeile aussehen (ohne GUI)? Vielen Dank!recoll
Benutzerhandbuch enthält möglicherweise einige Hinweise, bietet jedoch eine eher technische und "nichtpwd
ext: pdf 'neuro *' - Stackoverflow hat die Backticks um pwd gefressen.Meine aktuelle Version von pdfgrep (1.3.0) erlaubt Folgendes:
Wenn Sie
pdfgrep --help
:Es funktioniert gut auf meinem Ubuntu.
quelle
Ich habe dieses zerstörerische kleine Drehbuch gemacht. Viel Spass damit.
quelle
$filename.
solltest du es einpfeifengrep
.Ich mag die Antwort von @ sjr, aber ich bevorzuge xargs vs -exec. Ich finde Xargs vielseitiger. Zum Beispiel können wir mit -P mehrere CPUs nutzen, wenn dies sinnvoll ist.
quelle
xargs
'Parallelverarbeitungsfähigkeit. Beachten Sie, dass Ihr--label
Optionsargument buchstäblich lautet{}
, da dergrep
Befehl jetzt nicht mehr im Kontext vonfind
's ausgeführt wirdexec
.Ich hatte das gleiche Problem und schrieb daher ein Skript, das alle PDF-Dateien im angegebenen Ordner nach einer Zeichenfolge durchsucht und die PDF-Dateien druckt, die mit der Abfragezeichenfolge übereinstimmen.
Vielleicht ist das hilfreich für Sie.
Sie können es hier herunterladen
quelle
pdfgrep
Lösung oder der Einzeiler von sjr ist, und es hat mir einen laufenden Prozess hinterlassen, bei dem 100% eines CPU-Threads verwendet werden, selbst nachdem ich Strg-C zum Beenden verwendet habe.Wenn Sie Dateinamen mit pdftotext anzeigen möchten, verwenden Sie den folgenden Befehl:
quelle
Es gibt ein anderes Dienstprogramm namens ripgrep-all , das auf ripgrep basiert .
Es kann mehr als nur PDF-Dokumente wie Office-Dokumente und -Filme verarbeiten, und der Autor behauptet, es sei schneller als
pdfgrep
.Befehlssyntax zum rekursiven Durchsuchen des aktuellen Verzeichnisses, und das zweite beschränkt sich nur auf PDF-Dateien:
quelle
Es gibt ein Open-Source- Grep- Tool für allgemeine Ressourcen, crgrep das in PDF-Dateien sucht, aber auch in anderen Ressourcen wie in Archiven verschachtelten Inhalten, Datenbanktabellen, Bild-Metadaten, POM-Dateiabhängigkeiten und Webressourcen - und Kombinationen davon, einschließlich rekursiver Suche.
Die vollständige Beschreibung auf der Registerkarte "Dateien" deckt weitgehend ab, was das Tool unterstützt.
Ich habe crgrep als OpenSource-Tool entwickelt.
quelle
Konvertieren Sie zuerst alle Ihre PDF-Dateien in Textdateien:
Dann
grep
wie gewohnt verwenden. Dies ist besonders gut, da es schnell ist, wenn Sie mehrere Abfragen und viele PDF-Dateien haben.quelle
ag
github.com/ggreer/the_silver_searcher . Kann Psychedeliks Gb in Mikrosekunden analysieren. Flat Files fürs LebenSie benötigen einige Tools wie pdf2text, um Ihr PDF zuerst in eine Textdatei zu konvertieren und dann im Text zu suchen. (Sie werden wahrscheinlich einige Informationen oder Symbole vermissen).
Wenn Sie eine Programmiersprache verwenden, sind wahrscheinlich PDF-Bibliotheken für diesen Zweck geschrieben. zB http://search.cpan.org/dist/CAM-PDF/ für Perl
quelle
Versuchen Sie, 'acroread' in einem einfachen Skript wie dem oben genannten zu verwenden
quelle