如何使用shell或grep命令识别带有书签的PDF文件
识别带书签PDF的Shell实现方法
首先需要提前安装对应的PDF处理命令行工具,以下提供两种常用实现方案:
方案1:使用pdftk(准确率最高)
pdftk是专门用于PDF编辑处理的命令行工具,对书签字段的识别兼容性最好。
安装方式:
- Debian/Ubuntu 系:
sudo apt install pdftk-java - CentOS/RHEL 系:
sudo dnf install pdftk - macOS(Homebrew):
brew install pdftk-java
- Debian/Ubuntu 系:
单文件检测命令:
执行以下命令会直接输出对应PDF是否带书签:pdftk 测试文件.pdf dump_data | grep -q "BookmarkTitle" && echo "带书签" || echo "无书签"批量检测目录下所有PDF,导出无书签文件列表:
执行后会生成待加书签PDF列表.txt,方便后续批量处理:for pdf in *.pdf; do if ! pdftk "$pdf" dump_data | grep -q "BookmarkTitle"; then echo "$pdf" >> 待加书签PDF列表.txt fi done如果需要遍历嵌套子目录的PDF,替换为以下写法即可:
find . -name "*.pdf" -type f | while read pdf; do if ! pdftk "$pdf" dump_data | grep -q "BookmarkTitle"; then echo "$pdf" >> 待加书签PDF列表.txt fi done
方案2:使用poppler-utils(轻量,多数系统预装)
如果不想额外安装pdftk,大部分Linux发行版、macOS默认会带poppler工具集,用其中的pdfinfo也可实现识别,准确率略低于pdftk。
安装方式(未预装时执行):
- Debian/Ubuntu 系:
sudo apt install poppler-utils - CentOS/RHEL 系:
sudo dnf install poppler-utils - macOS(Homebrew):
brew install poppler
- Debian/Ubuntu 系:
核心检测逻辑和方案1一致,仅需将判断条件替换为:
pdfinfo -dests "$pdf" | grep -q "Name"
内容的提问来源于stack exchange,提问作者Dellu
相关产品推荐
相关产品推荐

