使用 Linux 上的命令行检查 PDF 文件是否损坏

使用 Linux 上的命令行检查 PDF 文件是否损坏

我的一个文件夹中有许多 PDF 文件。

是否可以使用命令行检查一个或多个文件是否损坏(零页或未完成的下载),而无需逐个打开它们?

答案1

您可以尝试使用pdfinfo(在 Fedora 软件包中poppler-utils)。pdfinfo从其字典中获取有关 PDF 文件的信息,因此如果找到该文件,则文件应该没问题

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

答案2

我选择检查 PDF 的工具是qpdf.qpdf有一个--check论点可以很好地发现 PDF 中的问题。

使用以下方法检查单个 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并将所有输出传输到。如果返回状态为0(即无错误),/dev/null则还打印文件名后跟“:OK”qpdf

  • -o -exec echo "{}": FAILED \; \)如果发现错误,则会执行以下代码:打印文件名,后跟“:FAILED”


获取地点qpdf

qpdfLinux 和 Windows 二进制文件均可在以下位置找到:https://github.com/qpdf/qpdf/releases。您也可以使用您选择的包管理器来获取它。例如,在 Ubuntu 上,您可以使用以下命令使用 apt 安装 qpdf:

apt install qpdf

答案3

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

答案4

我得到了自己的答案:

for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done

有错误的 PDF 将显示错误。

相关内容