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

如何使用Bash字符串格式化反转日期格式并批量重命名文件?

批量重命名PDF文件:从MM-DD-YYYY到YYYY-MM-DD

这问题我日常整理文件时经常碰到,分享几个靠谱的Bash技巧,按需选用:

方法1:用rename命令(推荐,简洁高效)

如果你的系统是Debian/Ubuntu这类发行版,默认的rename是Perl版本的,直接用正则替换就能搞定:

rename 's/(\d{2})-(\d{2})-(\d{4})\.pdf/$3-$1-$2\.pdf/' *.pdf

正则解释:

  • (\d{2}) 捕获两位数字的月份(MM)
  • (\d{2}) 捕获两位数字的日期(DD)
  • (\d{4}) 捕获四位数字的年份(YYYY)
  • $3-$1-$2 把捕获到的内容按「年份-月份-日期」重新排列,最后保留.pdf后缀

如果是RedHat/CentOS这类系统,默认的rename是C版本的,语法不同,更推荐安装Perl版的rename(比如sudo yum install prename),之后就能用上面的命令了。

方法2:用for循环+mv(兼容性强,无依赖)

如果你的系统没有rename命令,或者担心版本差异,用Bash循环结合mv是最稳妥的:

for file in *.pdf; do
  # 用正则匹配文件名是否严格符合MM-DD-YYYY.pdf格式
  if [[ $file =~ ^([0-9]{2})-([0-9]{2})-([0-9]{4})\.pdf$ ]]; then
    # 从BASH_REMATCH数组提取捕获的组,拼接新文件名
    new_name="${BASH_REMATCH[3]}-${BASH_REMATCH[1]}-${BASH_REMATCH[2]}.pdf"
    # 先可以把mv换成echo,测试输出是否正确,没问题再执行重命名
    mv "$file" "$new_name"
  fi
done

重要提醒

  • 先测试再执行:把命令里的mv换成echo,先打印出要执行的重命名操作,确认格式正确再换成mv。
  • 防止文件覆盖:如果目标目录已经存在同名的YYYY-MM-DD.pdf文件,mv会直接覆盖它,执行前最好先排查一下。
  • 精准匹配:上面的正则只会处理严格符合MM-DD-YYYY.pdf格式的文件,其他命名格式的文件会被忽略,不会误操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:46