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

Bash中用正则批量复制重命名文件:替换指定内容+移除末尾下划线

用单次正则完成批量重命名的解决方案

核心命令(Perl版rename)

先确认你的系统安装的是Perl版本的rename(Debian/Ubuntu系默认自带,可通过rename --version验证,输出包含Perl字样即可)。先执行测试命令预览修改结果(不会实际改动文件):

rename -n "s/_N_(.*?)_$/_${theID}_\1/" *.cfc_

确认预览结果符合预期后,去掉-n执行实际重命名:

rename "s/_N_(.*?)_$/_${theID}_\1/" *.cfc_

正则逻辑拆解

这条正则表达式/_N_(.*?)_$/同时锁定了两个需要修改的目标:

  1. _N_:精准匹配文件名中要替换的固定标识
  2. (.*?):非贪婪捕获_N_到末尾下划线之间的所有内容(避免误匹配其他位置的下划线)
  3. _$:匹配文件名末尾的下划线

替换部分_${theID}_\1同步完成两个修改:

  • 用_${theID}_替换原有的_N_
  • 用捕获到的中间内容\1替代原末尾下划线前的内容,等价于直接移除了末尾的下划线

示例验证

当theID=32时,原文件myFile_N_something.cfc_会被正则处理为:

  • 捕获组\1对应内容是something.cfc
  • 最终生成文件名myFile_32_something.cfc,完全符合需求

兼容util-linux版rename的备选方案

如果你的系统是CentOS等使用util-linux版rename(不支持Perl正则),可以用bash参数扩展结合循环实现单次逻辑处理:

export theID=32
for file in *.cfc_; do
    newfile="${file/_N_/_${theID}_}"  # 替换_N_标识
    newfile="${newfile%_}"             # 移除末尾下划线
    mv "$file" "$newfile"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:33:16