[MacOS]通过Rename命令批量重命名文件

时间:2022-10-11 14:52:26

搬迁一篇旧文,原载于我个人搭建的博客网站,体验下博客园的编辑器和展示效果。

 

问题背景:

海贼王OnePiece动画连载已近800集,由于之前是从不同渠道(汉化组、动漫论坛等)下载的,文件命名规则自成一套体系。
对于有轻度收集癖和强迫症的我来说,进行分类管理以及命名规则的统一,蓄谋已久。

It's time!

需求列表:

  • 兼容现有的各种命名规则
  • 名称统一转换为:OnePiece-xxx
  • 保留原有的视频格式后缀

实现过程

1. 通过Homebrew安装rename
2. 分析文件对象特征,补充知识
3. 研究成果展示及拆解

1.安装rename

MacOS未自带rename命令,遂通过Homebrew安装:

brew install rename

 

按所查资料得知, rename 的参数用法与 sed 相似,结果研究半天后发现不完全一致,后来发现,安装的rename是用Perl写的,因此研究了下Perl的正则表达式,顺便学习了下各类正则的差异(链接见文末参考文档)。

2.分析文件对象特征

虽然各源的文件命名方式千奇百怪,但其中还是有一些共同特征的:

  • 文件名中有意义的信息为:集数、文件格式;
  • 有两种格式视频:mp4、rmvb;
  • 文件名中有多个‘.’;
  • 集数中有‘-’。

同时进行的查阅资料、学习的过程,在此不表...

3.研究成果展示及拆解

先上结果:

rename 's/\D*(\d+-?\d+).*\.(\w+)$/OnePiece-$1.$2/' *

 

释义:将当前目录下所有文件按正则表达式的规则进行重命名


正则部分含义拆解:

s/               // 替换模式
\D*(\d+-?\d+).*\.(\w+)$  // 需被替换的字符串
/                // 分隔符(固定)
OnePiece-$1.$2        // 新的字符串
/               // 结束符

 

Part1.继续拆解 \D*(\d+-?\d+).*\.(\w+)$  :

\D*        // 任意多的非数字字符
(\d+-?\d+)   // 连续的数字,可能存在'-'(如:251-252,两集连播)
.*        // 任意多的字符
\.(\w+)$    // 获得文件扩展名(以‘.英文字母’结尾,如:.mp4 或 .rmvb)

 

Part2.继续拆解 OnePiece-$1.$2  :

OnePiece-   // 普通字符串,重新命名的固定前缀
$1       // 获取第一个'()'内的字符串,即:文件的编号
.       // 普通字符‘.’
$2      // 获取第二个'()'内的字符串,即:文件扩展名

 

参考文档:

[Perl的正则表达式][http://www.chinaunix.net/old_jh/25/159388.html]

[Linux Shell 正则表达式(BREs,EREs,PREs)差异比较][http://blog.csdn.net/fdl19881/article/details/7800877]