web-dev-qa-db-ja.com

複数のPDFファイルのコンテンツを検索する方法は?

ディレクトリ/サブディレクトリ内のPDFファイルの内容を検索するにはどうすればよいですか?いくつかのコマンドラインツールを探しています。 grepはPDFファイルを検索できないようです。

204
Jestin Joy

ディストリビューションは、pdftotextというユーティリティを提供する必要があります。

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

「-」は、pdftotextをファイルではなくstdoutに出力するために必要です。 --with-filenameおよび--label=オプションは、grepの出力にファイル名を入れます。オプションの--colorフラグはNiceであり、端末の色を使用して出力するようにgrepに指示します。

(Ubuntuでは、pdftotextxpdf-utilsまたはpoppler-utilsパッケージによって提供されます。)

GNU pdftotext that grepの機能を使用する場合、pdfgrepおよびgrepを使用するこの方法には、pdfgrepよりも利点があります。サポートしていません。 :pdfgrep-1.3.xは、コンテキストの行を印刷するための-Cオプションをサポートします。

191
sjr

pdfgrep があります。これは、その名前が示すとおりのものです。

pdfgrep -R 'a pattern to search recursively from path' /some/path

単純な検索に使用しましたが、うまく機能しました。

(Debian、Ubuntu、Fedoraにはパッケージがあります。)

バージョン1.3.0以降 pdfgrep は再帰検索をサポートしています。このバージョンは、Ubuntu 12.10(Quantal)以降のUbuntuで使用できます。

195
Graeme

Recoll は、Unix/Linux用の素晴らしい全文GUI検索アプリケーションであり、PDFを含む数十の異なる形式をサポートしています。クエリの正確なページ番号と検索語をドキュメントビューアーに渡すこともできるため、GUIから直接結果にジャンプできます。

Recollには、実行可能なコマンドラインインターフェイスと web-browserインターフェイス も付属しています。

26
Glutanimate

Pdfgrep(1.3.0)の実際のバージョンでは、次のことができます。

pdfgrep -HiR 'pattern' /path

pdfgrep --helpを実行する場合:

  • H:各一致のファイル名を出力します。
  • i:大文字と小文字の区別を無視します。
  • R:再帰的にディレクトリを検索します。

私のUbuntuでうまく機能します。

12
arkhi

私はこれを作成しました破壊的小さなスクリプト。それを楽しんでください。

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

@sjrの答えは好きですが、xargs対-execの方が好きです。 xargsの方が用途が広いと思います。たとえば、-Pを使用すると、意味がある場合に複数のCPUを利用できます。

find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
3
Deian

pdftotextでファイル名を表示する場合は、次のコマンドを使用します。

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

同じ問題が発生したため、指定したフォルダー内のすべてのpdfファイルで文字列を検索し、クエリ文字列に一致するPDFファイルを印刷するスクリプトを作成しました。

たぶんこれはあなたに役立つでしょう。

ダウンロードできます こちら

2
Paul Weibert

オープンソースの共通リソースgrepツール crgrep があり、PDFファイル内だけでなく、アーカイブにネストされたコンテンツ、データベーステーブル、イメージメタデータ、POMファイルの依存関係、 Webリソース-再帰検索を含むこれらの組み合わせ。

[ファイル]タブの下の完全な説明は、ツールがサポートするものをほぼカバーしています。

私はcrgrepをオープンソースツールとして開発しました。

1
Craig

まず、すべてのpdfファイルをテキストファイルに変換します。

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

その後、通常どおりgrepを使用します。これは、複数のクエリと多数のPDFファイルがある場合に高速であるため、特に優れています。

1
Martin Thoma

最初にpdfをテキストファイルに変換してからテキスト内を検索するには、pdf2textなどのツールが必要です。 (おそらくいくつかの情報や記号を見逃すでしょう)。

プログラミング言語を使用している場合、おそらくこの目的のために書かれたpdfライブラリがあります。例えば http://search.cpan.org/dist/CAM-PDF/ Perlの場合

0
Nylon Smile

ripgrep-all と呼ばれる別のユーティリティがあり、これは ripgrep に基づいています。

Office文書や映画などのPDF文書だけでなく、作成者 claimspdfgrepよりも高速です。

現在のディレクトリを再帰的に検索するためのコマンド構文。2番目のコマンドはPDFファイルのみに制限されます。

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