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

如何在macOS终端用Perl版rename批量重命名文件为自定义字符串加索引

使用Perl版rename批量重命名文件为自定义字符串加索引

核心命令

先运行预览命令确认重命名效果(不会实际修改文件):

rename -n 'our $i=1; s/^.*(\.\w+)$/bar' . $i++ . $1/e' *.png

确认无误后,去掉-n执行实际重命名:

rename 'our $i=1; s/^.*(\.\w+)$/bar' . $i++ . $1/e' *.png

命令详解

  • -n:预览模式,仅输出将要执行的重命名操作,用于验证规则是否正确,避免误操作。
  • our $i=1:声明一个全局计数器变量并初始化为1,确保处理第一个文件时索引从1开始(若用my $i=1,每次处理文件都会重置计数器,导致所有文件都被命名为bar1.png)。
  • 正则表达式与替换逻辑:
    • s/^.*(\.\w+)$/.../e:Perl正则替换语句,/e修饰符表示替换部分会作为Perl代码执行(而非普通字符串)。
      • ^.*:匹配文件名中从开头到扩展名前的所有字符。
      • (\.\w+)$:捕获文件的扩展名(包括前面的点,比如.png),捕获的内容会保存在变量$1中。
    • 'bar' . $i++ . $1:将自定义字符串bar、递增的索引值(每次处理文件后计数器加1)、捕获的扩展名拼接成新文件名。
  • *.png:Shell通配符,匹配当前目录下所有.png格式的文件,和你习惯的通配符用法一致。

分步操作

  1. 进入目标文件夹:
cd foo
  1. 运行预览命令,检查输出的重命名规则是否符合预期:
rename -n 'our $i=1; s/^.*(\.\w+)$/bar' . $i++ . $1/e' *.png
  1. 确认预览结果无误后,执行实际重命名:
rename 'our $i=1; s/^.*(\.\w+)$/bar' . $i++ . $1/e' *.png

额外技巧

  • 按文件排序重命名:如果需要按文件修改时间排序(比如从旧到新),可以结合ls命令:
ls -tr *.png | rename 'our $i=1; s/^.*(\.\w+)$/bar' . $i++ . $1/e'
  • -tr表示按修改时间逆序(旧文件在前),去掉r则是新文件在前。
  • 处理所有扩展名的文件:如果需要重命名当前目录下所有文件(不管扩展名),可以修改正则和通配符:
rename -n 'our $i=1; s/^(.+)(\.\w+)?$/bar' . $i++ . ($2//'')/e' *
  • 此命令会给无扩展名的文件直接命名为bar1、bar2等。

常见疑惑解答

  • 关于*的作用:这里的*就是标准Shell通配符,用来指定要处理的文件范围,和你日常使用的通配符完全一致。之前看到的-s参数是简单字符串替换模式,而我们这里使用的是Perl正则替换模式,因此不需要-s。
  • Perl正则与"常规"正则的差异:大部分基础语法(比如捕获组、匹配规则)是一致的,Perl正则只是增加了更多高级特性(比如/e修饰符),本次用到的语法都是通用正则的延伸,容易理解和复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:41:11