ディレクトリ/サブディレクトリ内のPDFファイルの内容を検索するにはどうすればよいですか?いくつかのコマンドラインツールを探しています。 grep
はPDFファイルを検索できないようです。
ディストリビューションは、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では、pdftotext
はxpdf-utils
またはpoppler-utils
パッケージによって提供されます。)
GNU pdftotext
that grep
の機能を使用する場合、pdfgrep
およびgrep
を使用するこの方法には、pdfgrep
よりも利点があります。サポートしていません。 注:pdfgrep-1.3.xは、コンテキストの行を印刷するための-C
オプションをサポートします。
Recoll は、Unix/Linux用の素晴らしい全文GUI検索アプリケーションであり、PDFを含む数十の異なる形式をサポートしています。クエリの正確なページ番号と検索語をドキュメントビューアーに渡すこともできるため、GUIから直接結果にジャンプできます。
Recollには、実行可能なコマンドラインインターフェイスと web-browserインターフェイス も付属しています。
Pdfgrep(1.3.0)の実際のバージョンでは、次のことができます。
pdfgrep -HiR 'pattern' /path
pdfgrep --help
を実行する場合:
私のUbuntuでうまく機能します。
私はこれを作成しました破壊的小さなスクリプト。それを楽しんでください。
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
}
@sjrの答えは好きですが、xargs対-execの方が好きです。 xargsの方が用途が広いと思います。たとえば、-Pを使用すると、意味がある場合に複数のCPUを利用できます。
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
pdftotextでファイル名を表示する場合は、次のコマンドを使用します。
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
同じ問題が発生したため、指定したフォルダー内のすべてのpdfファイルで文字列を検索し、クエリ文字列に一致するPDFファイルを印刷するスクリプトを作成しました。
たぶんこれはあなたに役立つでしょう。
ダウンロードできます こちら
オープンソースの共通リソースgrepツール crgrep があり、PDFファイル内だけでなく、アーカイブにネストされたコンテンツ、データベーステーブル、イメージメタデータ、POMファイルの依存関係、 Webリソース-再帰検索を含むこれらの組み合わせ。
[ファイル]タブの下の完全な説明は、ツールがサポートするものをほぼカバーしています。
私はcrgrepをオープンソースツールとして開発しました。
まず、すべてのpdfファイルをテキストファイルに変換します。
for file in *.pdf;do pdftotext "$file"; done
その後、通常どおりgrep
を使用します。これは、複数のクエリと多数のPDFファイルがある場合に高速であるため、特に優れています。
最初にpdfをテキストファイルに変換してからテキスト内を検索するには、pdf2textなどのツールが必要です。 (おそらくいくつかの情報や記号を見逃すでしょう)。
プログラミング言語を使用している場合、おそらくこの目的のために書かれたpdfライブラリがあります。例えば http://search.cpan.org/dist/CAM-PDF/ Perlの場合
ripgrep-all と呼ばれる別のユーティリティがあり、これは ripgrep に基づいています。
Office文書や映画などのPDF文書だけでなく、作成者 claims はpdfgrep
よりも高速です。
現在のディレクトリを再帰的に検索するためのコマンド構文。2番目のコマンドはPDFファイルのみに制限されます。
rga 'pattern' .
rga --type pdf 'pattern' .