Linuxのコマンドラインを使用してPDFファイルが破損していないか確認します


16

1つのフォルダーに多くのPDFファイルがあります。

コマンドラインを使用して、ファイルを1つずつ開く必要なく、1つ以上のファイルが破損しているかどうかを確認できますか(ゼロページ、または未完了のダウンロード)。

回答:


20

おそらくpdfinfo(ここではpoppler-utilsパッケージのFedoraで)実行すると手がかりが得られますか?

PDFファイルの情報のほとんどは最後に辞書にあるため、見つかった場合は問題ないはずです。私は次のようなことをします:

for f in *.pdf; do
  if pdfinfo "$f" > /dev/null; then
    : Nothing
  else
    echo "$f" is broken
  fi
done

6
pdfinfoをpdftotextに置き換えることをお勧めします。これにより、すべてのページのすべてのテキストがチェックされます。また、すべてのエラーメッセージが表示されないように、> gt文字を&>にする必要があります。
schoetbi 14年

すべてのPDFに破損のフラグが付けられます。それらの何百ギガバイト。作成したものを含めます。使用しているかどうpdfinfopdftotext...
PatrickT

13

これは私のスクリプトです

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

明確にするために:このスクリプトは、.brokenを.pdf拡張子に追加することにより、「broken」と診断されたpdfファイルの名前を変更します。
PatrickT

5

PDFをチェックするのに最適なツールはqpdfです。qpdfには、--checkPDFの問題を見つけるのに役立つ引数があります。

単一のPDFをチェックするにはqpdf

qpdf --check test_file.pdf

次のコマンドを使用して、ディレクトリ内のすべてのPDFを確認しますqpdf

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

qpdfLinuxとWindowsの両方のバイナリがhttps://github.com/qpdf/qpdf/releasesで利用可能です。また、選択したパッケージマネージャーを使用して取得することもできます。たとえば、Ubuntuでは、次のコマンドでaptを使用してqpdfをインストールできます。

apt install qpdf

ただし、qpdf --check複数のツールで異なる方法で処理されるため、誤って定義された多重定義メタデータは検出しません。バグを報告しました。pdfinfoやなどの他のツールはありpdftkませんが、PDF構造のチェックを要求しません。
vinc17


2

私が使用した、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:
単に戻るvalidinvalid

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環境でも同じように動作することに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.