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

如何用Bash批量将文件名中的英文月份替换为对应数字月份

文件名批量转换(英文月份转数字月份)解决方案

需求背景

  • 运行环境:MXLinux
  • 待处理文件:约500个格式为2020-August-15.pdf、2021-October-15.pdf的PDF文件
  • 转换目标:统一修改为2020-08-15.pdf、2021-10-15.pdf格式,避免手动逐个修改
  • 初始偏好:希望通过管道传递ls结果的命令组合实现,尽量不写显式for循环

最终可用方案

实测稳定可用的Bash实现如下:

declare -A months=( [January]=01 [February]=02 [March]=03 [April]=04 [May]=05\
[June]=06 [July]=07 [August]=08 [September]=09 [October]=10 [November]=11 [December]=12 )

for oldname in 202[01]-[A-za-z]*-15.pdf
do
    IFS=-. read y m d ext <<< "${oldname}"
    mv "$oldname" "$y-${months[$m]}-$d.$ext"
done

方案优势

  1. 灵活性高:不需要硬编码文件后缀,通过read按分隔符自动拆分文件名结构,后续如果文件格式变化调整成本低
  2. 容错性强:for循环直接用通配符匹配目标文件,不需要解析ls输出,不会因为文件名含空格、特殊字符出现异常
  3. 逻辑简单易改:月份映射用关联数组直接定义,不需要反复调用date命令做转换,执行效率更高,也方便后续调整月份匹配规则

注:该方案虽使用了显式for循环,但相比管道解析ls的实现稳定性更好,是更适合批量文件操作的写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:54:03