von*_*and 24
您可以尝试使用pdfinfo(在poppler-utils软件包中的Fedora 上)。pdfinfo从其字典中获取有关 PDF 文件的信息,因此如果找到它,该文件应该没问题
for f in *.pdf; do
if ! pdfinfo "$f" &> /dev/null; then
echo "$f" is broken
fi
done
Run Code Online (Sandbox Code Playgroud)
sch*_*tbi 15
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
Run Code Online (Sandbox Code Playgroud)
moo*_*moo 11
我选择的检查 PDF 的工具是qpdf. qpdf有一个--check论点可以很好地发现 PDF 中的问题。
qpdf:qpdf --check test_file.pdf
Run Code Online (Sandbox Code Playgroud)
qpdf:find ./directory_to_scan/ -type f -iname '*.pdf' \( -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; -o -exec echo "{}": FAILED \; \)
Run Code Online (Sandbox Code Playgroud)
命令说明:
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 \; \) 如果发现错误,则执行此操作:打印文件名后跟“:失败”
qpdf:qpdf在以下位置提供 Linux 和 Windows 二进制文件:https : //github.com/qpdf/qpdf/releases。您也可以使用您选择的包管理器来获取它。例如,在 Ubuntu 上,您可以使用 apt 和以下命令安装 qpdf:
apt install qpdf
Run Code Online (Sandbox Code Playgroud)
所有使用pdfinfo或pdftotext没有对我有用的方法。事实上,他们不断给我误报,有时还创建了我不需要的文件。
起作用的是JHOVE。
安装:
从上面的链接安装 jar 并使用以下命令更新 PATH 环境变量:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
刷新每个终端
source ~/.bash_profile,您就可以开始在系统范围内使用它了。
基本用法:
jhove -m pdf-hul someFile.pdf
Run Code Online (Sandbox Code Playgroud)
您将获得有关 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;
Run Code Online (Sandbox Code Playgroud)
请注意,这是在 Mac OS X 上运行的,但我认为它在任何基于 Unix 的 Bash 环境中都可以正常工作。