ディレクトリ/サブディレクトリ内のPDFファイルのコンテンツを検索するにはどうすればよいですか?コマンドラインツールを探しています。grep
PDFファイルを検索できないようです。
ディレクトリ/サブディレクトリ内のPDFファイルのコンテンツを検索するにはどうすればよいですか?コマンドラインツールを探しています。grep
PDFファイルを検索できないようです。
回答:
ディストリビューションには、次のユーティリティが必要ですpdftotext
。
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
「-」は、pdftotextをファイルではなく標準出力に出力するために必要です。--with-filename
および--label=
オプションのgrepの出力にファイル名を入れます。オプションの--color
フラグは便利で、端末で色を使用して出力するようにgrepに指示します。
(Ubuntuでは、pdftotext
パッケージxpdf-utils
またはによって提供されますpoppler-utils
。)
pdftotext
and を使用するこの方法は、サポートしていないGNUの機能を使用する場合よりもgrep
優れていpdfgrep
ます。注:pdfgrep-1.3.xは、コンテキスト行を印刷するオプションをサポートしています。grep
pdfgrep
-C
grep
印刷されたファイル名をフィルタリングするため、行った編集「(-kp-で編集)」は機能しません。
pdfgrep
ソリューションは本当にすばやく簡単な検索には適していますが、1行では十分ではないため、いくつかのコンテキストを取得したいことがよくあります。この回答に追加したように、たとえば、 「あなたのパターン」の前に-C5オプションを付けて出力に5行のコンテキストを含める-pdfgrepはこれをサポートしていません
pdfgrep
無用である、それは扱うことができないファイルにゴミの膨大な量を報告します。一方、あなたの解決策は役に立ちました。ですから、削除しないでください。3年経ってもまだ役に立ちます!
pdfgrepがあり、その名前が示すとおりに動作します。
pdfgrep -R 'a pattern to search recursively from path' /some/path
私は単純な検索に使用しましたが、うまくいきました。
(Debian、Ubuntu、Fedoraにはパッケージがあります。)
バージョン1.3.0以降、pdfgrepは再帰検索をサポートしています。このバージョンは、Ubuntu 12.10(Quantal)以降のUbuntuで使用できます。
pdfgrep
は、-R
シンボリックリンクも追跡するなど、再帰オプションがあります
Recollは、PDFを含む数十の異なるフォーマットをサポートする、Unix / Linux向けの素晴らしい全文GUI検索アプリケーションです。クエリの正確なページ番号と検索語をドキュメントビューアに渡すこともできるため、GUIから直接結果にジャンプできます。
Recollには、実行可能なコマンドラインインターフェースとウェブブラウザインターフェースも付属しています。
recoll / xapian
コマンドライン(非GUI)ではどのように見えますか?ありがとう!
recoll
マニュアルは ...いくつかのポインタが含まれているかもしれませんが、申し出ではなく、技術とは、「オフトピック」読み
pwd
ext:pdf 'neuro *'-stackoverflowがpwdの周りのバッククォートを食べました。
私はこの破壊的な小さなスクリプトを作りました。楽しんでください。
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.
それをパイプする必要がありますgrep
。
私は@sjrの答えが好きですが、xargsと-execの方が好きです。xargsの方が用途が広いと思います。たとえば、-Pを使用すると、意味のある複数のCPUを利用できます。
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
'並列処理機能に関する興味深い点。あなたのことを注意--label
オプション引数がないであろう、文字通り {}
ので、grep
コマンドはもはやのコンテキストで実行されるfind
のexec
。
pdftotextでファイル名を表示したい場合は、次のコマンドを使用します。
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
PDFファイル内だけでなく、アーカイブにネストされたコンテンツ、データベーステーブル、画像メタデータ、POMファイルの依存関係、Webリソースなどのリソースや、再帰検索を含むこれらの組み合わせなど、他のリソースも含む、オープンソースの共通リソースgrepツールcrgrepがあります。
[ファイル]タブの下の完全な説明は、ツールがサポートするものをほぼカバーしています。
オープンソースツールとしてcrgrepを開発しました。
PDFをテキストファイルに変換してからテキスト内を検索するには、pdf2textなどのツールが必要です。(おそらくいくつかの情報や記号を見逃すでしょう)。
プログラミング言語を使用している場合、おそらくこの目的のために作成されたPDFライブラリがあります。例: Perlの場合はhttp://search.cpan.org/dist/CAM-PDF/