跳到主要内容

rename

一、rename 命令简介

用途:批量重命名文件。

语法:

bash
rename [选项] <规则> <要匹配的文件>

常用选项:

  • -v:显示重命名操作的详细过程,便于确认操作结果。
  • -n:模拟,显示将要执行的重命名操作,但不会实际修改文件。
  • -f:强制执行重命名操作,覆盖已经存在的目标文件。

二、rename 命令示例

示例 1 批量修改文件后缀

例如,txt 后缀改为 md 后缀

bash
rename  's/.txt$/.md/' *.txt

注意:修改前使用 -n 模拟修改结果,防止造成不可逆的坏结果!

bash
$ rename -n 's/.txt$/.md/' *.txt
rename(a.txt.txt, a.txt.md)
rename(file1.txt, file1.md)
rename(file2.txt, file2.md)
rename(file3.txt, file3.md)

示例 2 截取部分原名

原名中存在冗余,导致文件名太长

bash
【计算机科学速成课】[40集全_精校] - Crash Course Computer Science_P1_1. 计算机早期历史-Early Computing.mp4
【计算机科学速成课】[40集全_精校] - Crash Course Computer Science_P2_2. 电子计算机-Electronic Computing.mp4
...

希望截取部分原名,去除冗余部分:

bash
1. 计算机早期历史-Early Computing.mp4
2. 电子计算机-Electronic Computing.mp4
...

实现:

bash
rename 's/.*P\d+_([0-9]+\..*)/$1/' *.mp4

注意:要想灵活使用 rename,必须学习正则表达式


原名

bash
一个8位二进制CPU的设计和实现_P1_00 一个8位二进制 CPU 的设计和实现.mp4
一个8位二进制CPU的设计和实现_P38_37.1 勘误-奇偶校验位上.mp4
...

希望

bash
P1 一个8位二进制 CPU 的设计和实现.mp4
P38 勘误-奇偶校验位上.mp4
...

实现

bash
# 第一步,去除冗余:一个8位二进制CPU的设计和实现_
$ rename -n 's/.*_(P.*)/$1/' *.mp4
rename(一个8位二进制CPU的设计和实现_P1_00 一个8位二进制 CPU 的设计和实现.mp4, P1_00 一个8位二进制 CPU 的设计和实现.mp4)
...

# 第二步,删除数字编号,需要匹配两种形式: _00 和 _37.1
$ rename -n 's/_\d+\.\d+//;s/_\d+//' *.mp4
rename(P1_00 一个8位二进制 CPU 的设计和实现.mp4, P1 一个8位二进制 CPU 的设计和实现.mp4)
rename(P38_37.1 勘误-奇偶校验位上.mp4, P38 勘误-奇偶校验位上.mp4)
...

示例 3 强制覆盖文件

rename 默认不会覆盖同名文件,除非使用 -f 选项。该命令会直接覆盖已有的目标文件,无需额外确认。

bash
rename -f 's/.txt$/.md/' *.txt