8000を超えるPDFファイルと数百のフォルダを含む外部バックアップドライブに保存されている顧客PDFファイルを見つけようとしています。
たとえば、Xドライブから自分の顧客名「Sequoia Group」を含むすべてのPDFファイルを検索したい場合は、関連する出力を取得するのに役立つコマンドラインおよび/またはツールは何ですか?
私はzshでMacOS High Sierraを使用しており、homebrewを介してGNU grep、ack、pdfgrepもインストールしました。しかし、まだファイルが見つかりませんでした。
すべてのファイルがPDF-Backup-0001、PDF-Backup-0002などで保存されているため、ファイル名が不明です。
これまで私は成功しなかったので、次のコマンドを使用しました。
#grep -wirl "sequoia group" ./
#pdfgrep -iHncRZ "sequoia group"
#mdfind "sequoia group"
また、このコマンドラインが提案されていますが、名前をどこに入力するのかわからないので、/ pathをドライブパスに置き換え、パターンを「sequoia」に変更しましたが、まだ一致するものが見つかりませんでした。
#find /path -iname '*.pdf' -exec pdfgrep pattern {} +
#find /Volumes/X Backup -iname '*.pdf' -exec pdfgrep "sequoia" {} +
ベストアンサー1
ああ、なぜこんなに見慣れているのか…
検索ディレクトリのルートで端末を開き、
pdfgrep -ril "sequoia group" >matches 2>bad.files
これにより、-r
検索語のすべてのPDFファイルが再帰的に検索され、大文字と小文字が区別されず、一致するテキストではなく-i
ファイル名のみが返されます-l
。
一致するすべてのファイル名はという名前のファイルに書き込まれ、matches
エラーはという名前のファイルに書き込まれますbad.files
。
matches
参照用に別のディレクトリにコピーできます。
while read f do; cp $f /wherever/I/want/$f; done < matches
破損しているかbad.files
OCRが正しくないため、別のディレクトリにコピーして再処理してからもう一度検索する必要があります。
find
おそらく変形pdf
などがPDF
あり、急いでいる場合
find /search/root/ -iname *.pdf -exec pdfgrep -il "sequoia group" {} ';' >matches 2>bad.files
上記でこれの説明をお願いしました。find
あなたが受け取ったコマンドは、pdfgrep
リダイレクトと同様に上記で説明されていると思います>
。
オプションはコマンドの出力を-exec
取得し、ユーザーが表示できる場所に保存します。find
find
{}
結局のところ、-exec
あなたは私が放し、あなたもそれを放してくれた;
ことに気づくでしょう+
。
+
-exec
すべての出力を収集して長い引数のリストに渡し、pdfgrepを一度実行しますfind
。pdfgrep
ファイル数が最大値を超えない限り、正常に機能します。
;
-exec
出力はfind
一度に1つのファイルに提供されます。pdfgrep
PS。 PDFファイルをどのように見ても開いてOCR処理されたか、実際に検索可能であることを確認してください。
そうでない場合は、各ディレクトリで実行する必要があります。
find /path/to/dir/ -maxdepth 1 -type f -iname "*.pdf" -print0 | while IFS= read -r -d $'\0' line; do pdfsandwich -lang eng "$line"; done
どれくらい時間がかかっても、8,000個のファイルをすべて処理することに専念できる場合は、検索ルートを削除して-maxdepth 1
指定するだけです。find