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

如何用Unix命令批量重命名并修剪指定格式的PDF文件?

批量重命名PDF文件的正确方法

需求说明

原文件名格式:xyz_00011111_03202023_en-GB.pdf
要实现的效果:

  • 把前缀xyz替换成abc
  • 移除文件名里的日期(_03202023)和国家代码(_en-GB)部分
  • 最终文件名:abc_00011111

原命令的问题

你之前用的命令:

$ for f in *.pdf; do mv "$f" $(echo $f | tr 'xyz' 'abc'); done

这里的tr 'xyz' 'abc'是逐个字符替换,会把文件名里所有的x换成a、y换成b、z换成c,根本不是替换前缀字符串,而且完全没处理日期和国家代码,自然达不到预期效果。

两种可行的解决方案

方法1:用sed正则匹配替换

for f in *.pdf; do
  new_name=$(echo "$f" | sed -E 's/^xyz_([0-9]+)_.*\.pdf$/abc_\1/')
  mv "$f" "$new_name"
done
  • 正则说明:^xyz_匹配开头的前缀,([0-9]+)捕获中间的编号部分,_.*\.pdf$匹配后面的日期、代码和后缀,最后替换成abc_加上捕获的编号。

方法2:用bash参数扩展(无需外部命令,更高效)

for f in xyz_*.pdf; do
  # 先去掉.pdf后缀
  base=${f%.pdf}
  # 拆分出前缀后的剩余部分
  rest=${base#xyz_}
  # 提取出第一个下划线前的编号
  id=${rest%%_*}
  # 拼接目标文件名
  new_name="abc_$id"
  mv "$f" "$new_name"
done
  • 步骤说明:通过bash自带的参数扩展逐步拆分文件名,避免调用外部工具,速度更快,也更稳定。

内容的提问来源于stack exchange,提问作者Rajesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:12:46