You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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分组,不用手动逐个输入命令,可以用循环+正则提取前缀的方式实现:

  1. 首先安装pdftk(Ubuntu 20.04+需要安装Java版本的pdftk):
sudo apt update && sudo apt install pdftk-java
  1. 执行下面的批量合并脚本:
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仓库里直接可用:

  1. 安装qpdf:
sudo apt install qpdf
  1. 单个分组合并命令:
qpdf --empty --pages $(find . -type f -name 'jim_contract*.pdf' | sort -V) -- jim_contract_merged.pdf
  1. 批量合并脚本:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:33:36