1つのフォルダに多くのPDFファイルがあります。
コマンドラインを使用して、1つ以上のファイルを1つずつ開く必要なく、破損している(ゼロページ、または未完了のダウンロード)かどうかを確認できますか?
pdfinfo
(ここではFedoraのpoppler-utils
パッケージ)。 pdfinfo
は、辞書からPDFファイルに関する情報を取得するため、見つかった場合、ファイルに問題はありません。
for f in *.pdf; do
if ! pdfinfo "$f" &> /dev/null; then
echo "$f" is broken
fi
done
find . -iname '*.pdf' | while read -r f
do
if pdftotext "$f" - &> /dev/null; then
echo "$f" was ok;
else
mv "$f" "$f.broken";
echo "$f" is broken;
fi;
done
PDFをチェックするための私の選択ツールは qpdf
です。 qpdf
には、PDFの問題を見つけるのに役立つ--check
引数があります。
qpdf
をチェックします:qpdf --check test_file.pdf
qpdf
を含むディレクトリ内のすべてのPDFを確認します。find ./directory_to_scan/ -type f -iname '*.pdf' \( -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; -o -exec echo "{}": FAILED \; \)
コマンドの説明:
find ./directory_to_scan/ -type f -iname '*.pdf'
拡張子が「.pdf」のすべてのファイルを検索
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;
見つかったファイルごとにqpdf
を実行し、すべての出力を/dev/null
にパイプします。また、qpdf
の戻りステータスが0(エラーなし)の場合は、ファイル名の後に「:OK」を付けて出力します。
-o -exec echo "{}": FAILED \; \)
エラーが検出された場合に実行されます:「:FAILED」が後に続くファイル名を印刷します
qpdf
:qpdf
には、LinuxとWindowsの両方のバイナリが用意されています: https://github.com/qpdf/qpdf/releases 。選択したパッケージマネージャーを使用して取得することもできます。たとえばUbuntuでは、次のコマンドでaptを使用してqpdfをインストールできます。
apt install qpdf
pdfinfo
またはpdftotext
を使用するすべてのメソッドが機能しませんでした。実際、彼らは私に偽陽性を与え続け、時には不要なファイルを作成してしまいました。
うまくいったのは [〜#〜] jhove [〜#〜] でした。
インストール:
上記のリンクからjarをインストールし、次のコマンドでPATH環境変数を更新します。
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
各ターミナルをsource ~/.bash_profile
で更新すると、システム全体で使用を開始できます。
基本的な使用法:
jhove -m pdf-hul someFile.pdf
PDFに関する多くの情報が得られます-ほとんどの人がおそらく必要とする以上のものです。
Bash One-Liner:
単にvalid
またはinvalid
を返します:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
これはMac OS Xで実行されていましたが、UnixベースのBash環境でも同じように機能すると想定しています。