我的一个文件夹中有许多 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
:
qpdf
Linux 和 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 将显示错误。