Ubuntu终端按文件名特征分组合并PDF文件的可行方法问询
解决Ubuntu终端按文件名特征分组合并PDF的问题
你的思路完全没问题,只是之前的命令语法有误,导致pdftk无法正确识别文件列表。下面我会一步步教你单个分组合并和批量自动合并所有分组的方法,还会补充一些细节避免踩坑。
单个分组的正确合并命令
你之前用单引号把find命令括起来,pdftk会把整个字符串find -type f -name 'jim_contract*'当成一个不存在的文件名,自然会报错。正确的做法是用命令替换($())让终端先执行find命令,再把结果传给pdftk:
pdftk $(find . -type f -name 'jim_contract*.pdf' | sort -V) cat output jim_contract_merged.pdf
这里加了sort -V是为了保证文件按数字顺序合并(比如contract1.pdf → contract2.pdf → contract3.pdf,而不是字典序导致的contract10.pdf排在contract2前面)。
批量自动合并所有分组
如果要一次性处理所有前缀的PDF分组,不用手动逐个输入命令,可以用循环+正则提取前缀的方式实现:
- 首先安装pdftk(Ubuntu 20.04+需要安装Java版本的pdftk):
sudo apt update && sudo apt install pdftk-java
- 执行下面的批量合并脚本:
for prefix in $(ls *.pdf | sed -E 's/([a-zA-Z_]+)[0-9]+\.pdf/\1/' | sort | uniq); do pdftk $(find . -type f -name "${prefix}*.pdf" | sort -V) cat output "${prefix}_merged.pdf" done
脚本解释:
ls *.pdf | sed -E 's/([a-zA-Z_]+)[0-9]+\.pdf/\1/':用正则提取每个PDF文件名的前缀(比如从jim_contract1.pdf中提取jim_contract)sort | uniq:去重得到所有唯一的分组前缀- 循环遍历每个前缀,找到对应所有PDF文件,按数字顺序合并成
前缀_merged.pdf
替代工具:qpdf
如果pdftk安装有问题,也可以用更轻量化的qpdf工具,它在Ubuntu仓库里直接可用:
- 安装qpdf:
sudo apt install qpdf
- 单个分组合并命令:
qpdf --empty --pages $(find . -type f -name 'jim_contract*.pdf' | sort -V) -- jim_contract_merged.pdf
- 批量合并脚本:
for prefix in $(ls *.pdf | sed -E 's/([a-zA-Z_]+)[0-9]+\.pdf/\1/' | sort | uniq); do qpdf --empty --pages $(find . -type f -name "${prefix}*.pdf" | sort -V) -- "${prefix}_merged.pdf" done
内容的提问来源于stack exchange,提问作者curly
相关产品推荐
相关产品推荐

