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

MacOS/OSX终端批量将含十六进制的文件名转为十进制

在MacOS终端实现十六进制文件名转十进制重命名

当然可以搞定这个需求!我们可以利用支持Perl表达式的rename工具来实现——如果你的Mac还没装这个版本的rename,先通过Homebrew安装:

brew install rename

核心命令

直接用find结合rename就能批量处理所有目标文件:

find . -name "MOV*.MOD" -type f -exec rename 's/MOV([0-9A-Fa-f]+)\.MOD/sprintf("MOV%d.MOD", hex($1))/e' {} \;

命令详解

让我拆解一下每个部分的作用:

  • find . -name "MOV*.MOD" -type f:遍历当前目录及所有子目录,筛选出以MOV开头、.MOD结尾的文件(-type f避免误处理目录)。
  • rename后的Perl替换逻辑:
    • s/原匹配模式/替换规则/e:这里的e修饰符是关键,它告诉rename把替换部分当作Perl代码执行,而不是普通字符串。
    • MOV([0-9A-Fa-f]+)\.MOD:正则匹配文件名,捕获MOV后面的十六进制数字(支持大小写)到变量$1。
    • sprintf("MOV%d.MOD", hex($1)):用hex()把捕获的十六进制字符串转成十进制整数,再通过sprintf拼接成新的文件名格式。

测试建议

在实际执行重命名前,强烈建议加-n参数做测试,这样只会打印出将要执行的重命名操作,不会真正修改文件:

find . -name "MOV*.MOD" -type f -exec rename -n 's/MOV([0-9A-Fa-f]+)\.MOD/sprintf("MOV%d.MOD", hex($1))/e' {} \;

比如你提到的MOV12B.MOD会显示为MOV12B.MOD -> MOV299.MOD,MOV12C.MOD会显示为MOV12C.MOD -> MOV300.MOD,确认结果符合预期后再去掉-n执行。

注意事项

  • 如果你的Mac用的是默认的BSD版本rename(不带Perl支持),必须先安装Homebrew的rename,否则上述命令会报错。
  • 要是你的文件名格式有变化(比如前缀不是MOV),只需要修改正则里的MOV部分即可,逻辑是通用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:14