Wie kann ich den Inhalt von PDF-Dateien in einem Verzeichnis / Unterverzeichnis durchsuchen? Ich suche einige Kommandozeilen-Tools. Es scheint, dass grep
PDF-Dateien nicht durchsucht werden können.
Wie kann ich den Inhalt von PDF-Dateien in einem Verzeichnis / Unterverzeichnis durchsuchen? Ich suche einige Kommandozeilen-Tools. Es scheint, dass grep
PDF-Dateien nicht durchsucht werden können.
Antworten:
Ihre Distribution sollte ein Hilfsprogramm namens enthalten pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
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 Paket xpdf-utils
oder bereitgestellt poppler-utils
.)
Diese Methode mit pdftotext
und grep
hat einen Vorteil gegenüber pdfgrep
der Verwendung von Funktionen von GNU grep
, pdfgrep
die nicht unterstützt werden. Hinweis : pdfgrep-1.3.x unterstützt die -C
Option zum Drucken von Kontextzeilen.
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 nicht
pdfgrep
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.
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.
pdfgrep
hat jetzt diese Rekursionsoption, einschließlich, -R
um auch Symlinks zu folgen
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 .
recoll / xapian
in der Kommandozeile aussehen (ohne GUI)? Vielen Dank!
recoll
Benutzerhandbuch enthält möglicherweise einige Hinweise, bietet jedoch eine eher technische und "nicht
pwd
ext: pdf 'neuro *' - Stackoverflow hat die Backticks um pwd gefressen.
Ich habe dieses zerstörerische kleine Drehbuch gemacht. Viel Spass damit.
function pdfsearch()
{
find . -iname '*.pdf' | while read filename
do
#echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
# remove it! rm -f "$filename."
done
}
$filename.
solltest du es einpfeifen grep
.
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.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
'Parallelverarbeitungsfähigkeit. Beachten Sie, dass Ihr --label
Optionsargument buchstäblich lautet {}
, da der grep
Befehl jetzt nicht mehr im Kontext von find
's ausgeführt wird exec
.
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
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:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
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:
rga 'pattern' .
rga --type pdf 'pattern' .
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.
Konvertieren Sie zuerst alle Ihre PDF-Dateien in Textdateien:
for file in *.pdf;do pdftotext "$file"; done
Dann grep
wie gewohnt verwenden. Dies ist besonders gut, da es schnell ist, wenn Sie mehrere Abfragen und viele PDF-Dateien haben.
ag
github.com/ggreer/the_silver_searcher . Kann Psychedeliks Gb in Mikrosekunden analysieren. Flat Files fürs Leben
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