Bash调用qpdf批量拆分目录内PDF仅拆分单文件问题求助
问题排查与修复方案
原脚本错误点
- 错误的管道逻辑与原文件破坏操作:原脚本将两个qpdf命令用管道连接,还在末尾通过管道执行
echo >> ${file},这行代码会直接往原REQ开头的PDF文件尾部追加空内容,第一个文件处理完成后原PDF就会被损坏,同时管道逻辑完全不符合qpdf的调用规则,后续文件自然无法正常处理。 - 序号无法累加:qpdf自带的
%d命名变量每次调用qpdf命令都会从1重新计数,直接使用会导致每次循环生成的inv-1.pdf、rec-1.pdf覆盖上一次循环的输出文件,不会生成递增的序号。 - 不安全的文件遍历方式:用
$(ls REQ*.pdf)遍历文件如果文件名包含空格等特殊字符会出错,直接用glob匹配更稳妥。
修复后脚本
#!/bin/bash # 初始化序号计数器 count=1 # 直接遍历所有REQ开头的PDF文件,避免ls的兼容性问题 for file in REQ*.pdf do # 跳过匹配不到文件的异常情况 [ -f "$file" ] || continue # 拆分1-5页,用计数器作为序号避免重名 qpdf "$file" --pages . 1-5 -- "inv-${count}.pdf" # 拆分第6页到最后一页 qpdf "$file" --pages . 6-z -- "rec-${count}.pdf" # 处理完成后计数器自增 count=$((count+1)) done
脚本说明
- 自定义
count变量控制输出文件名的序号,每处理一个原PDF文件序号自增1,保证所有拆分文件不会重名覆盖 - 移除了错误的管道和修改原文件的操作,不会破坏原始的REQ开头PDF文件
- 增加了文件存在性判断,避免目录下没有匹配文件时执行报错
内容的提问来源于stack exchange,提问作者PonH
相关产品推荐
相关产品推荐

