it-swarm.com.de

Wie kann ich den Inhalt mehrerer PDF-Dateien durchsuchen?

Wie kann ich den Inhalt von PDF Dateien in einem Verzeichnis/Unterverzeichnis durchsuchen? Ich suche nach Kommandozeilenwerkzeugen. Es scheint, dass grep nicht suchen kann PDF Dateien.

204
Jestin Joy

Ihre Distribution sollte ein Hilfsprogramm namens pdftotext bereitstellen:

find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

Das "-" ist erforderlich, damit pdftotext auf stdout und nicht auf files ausgegeben wird. Die Optionen --with-filename Und --label= Setzen den Dateinamen in die Ausgabe von grep. Das optionale Flag --color Ist Nice und weist grep an, mit Farben auf dem Terminal auszugeben.

(In Ubuntu wird pdftotext durch das Paket xpdf-utils Oder poppler-utils Bereitgestellt.)

Diese Methode, die pdftotext und grep verwendet, hat einen Vorteil gegenüber pdfgrep, wenn Sie Funktionen von GNU grep das pdfgrep unterstützt nicht. Hinweis: pdfgrep-1.3.x unterstützt die Option -C Zum Drucken der Kontextzeile.

191
sjr

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.

195
Graeme

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 Document Viewer übergeben und Sie können so direkt von der Benutzeroberfläche aus zum Ergebnis springen.

Recoll verfügt außerdem über eine funktionsfähige Befehlszeilenschnittstelle und eine Webbrowser-Schnittstelle .

26
Glutanimate

Meine aktuelle Version von pdfgrep (1.3.0) ermöglicht Folgendes:

pdfgrep -HiR 'pattern' /path

Wenn Sie pdfgrep --help:

  • H: Gibt den Dateinamen für jede Übereinstimmung aus.
  • i: Groß- und Kleinschreibung ignorieren.
  • R: Verzeichnisse rekursiv durchsuchen.

Es funktioniert gut auf meinem Ubuntu.

12
arkhi

Ich habe dieses destruktive kleine Skript erstellt. 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
}
7
phil

Ich mag die Antwort von @ sjr, aber ich bevorzuge xargs vs -exec. Ich finde Xargs vielseitiger. Beispielsweise 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"
3
Deian

Wenn Sie Dateinamen mit pdftotext sehen möchten, verwenden Sie den folgenden Befehl:

find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf" 
2

Ich hatte das gleiche Problem und schrieb ein Skript, das alle PDF-Dateien im angegebenen Ordner nach einer Zeichenfolge durchsucht und die PDF Dateien ausgibt, die mit der Abfragezeichenfolge übereinstimmen.

Vielleicht ist das hilfreich für Sie.

Sie können es herunterladen hier

2
Paul Weibert

Es gibt ein allgemeines Open-Source-Ressourcentool grep crgrep , das in PDF) - Dateien, aber auch in anderen Ressourcen wie in Archiven, Datenbanktabellen, Bildmetadaten, POM verschachtelten Inhalten sucht Dateiabhängigkeiten und Webressourcen - und Kombinationen davon, einschließlich rekursiver Suche.

Die vollständige Beschreibung auf der Registerkarte "Dateien" deckt ziemlich genau ab, was das Tool unterstützt.

Ich habe crgrep als OpenSource-Tool entwickelt.

1
Craig

Konvertieren Sie zuerst alle Ihre PDF-Dateien in Textdateien:

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

Verwenden Sie dann wie gewohnt grep. Dies ist besonders gut, da es schnell geht, wenn Sie mehrere Abfragen und viele PDF Dateien haben.

1
Martin Thoma

Sie benötigen einige Tools wie pdf2text, um Ihre PDF-Datei zunächst in eine Textdatei zu konvertieren und anschließend im Text zu suchen. (Sie werden wahrscheinlich einige Informationen oder Symbole vermissen).

Wenn Sie eine Programmiersprache verwenden, gibt es wahrscheinlich PDF-Bibliotheken, die für diesen Zweck geschrieben wurden. z.B. http://search.cpan.org/dist/CAM-PDF/ für Perl

0
Nylon Smile

Es gibt ein weiteres Dienstprogramm namens ripgrep-all , das auf ripgrep basiert.

Es kann mehr als nur PDF Dokumente, wie Office-Dokumente und Filme, und der Autor Ansprüche es ist schneller als pdfgrep.

Befehlssyntax zum rekursiven Durchsuchen des aktuellen Verzeichnisses, und das zweite beschränkt sich auf PDF Dateien nur:

rga 'pattern' .
rga --type pdf 'pattern' .
0
oschoudhury