rename命令用于重命名多个文件。这个命令比mv更高级,因为它需要一些正则表达式的基本知识。它有两个版本:C语言 版本和 Perl 版本;版本不同,语法也就不同。

区分 rename 命令的版本

输入 man rename 看到第一行是

RENAME(1) Linux Programmer’s Manual RENAME(1)

那么这个就是 C语言 版本的。

而如果出现的是:

RENAME(1) Perl Programmers Reference Guide RENAME(1)

这个就是 Perl 版本的。


基本语法:

C语言 版本的 rename

参数格式:

rename [options] expression replacement file

  • 第一个参数:被替换掉的字符串
  • 第二个参数:替换成的字符串
  • 第三个参数:匹配要替换的文件模式

rename 命令支持通配符进行批量重命名,基本的通配符有以下几个:

|:-:|:-|
|? |可替代单个字符|
|* |可替代多个字符|
|[charset]|可替代charset集中的任意单个字符|

例:

文件夹中有这些文件 foo1, ..., foo9, foo10, ..., foo278,

rename foo foo0 foo?

foo1foo9 的文件被重命名为 foo01foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的 foo 被替换为 foo0

rename foo foo0 foo??

foo01foo99 的所有文件都被重命名为 foo001foo099,只重命名5个字符长度名称的文件,文件名中的 foo 被替换为 foo0

rename foo foo0 foo*

foo001foo278 的所有文件都被重命名为 foo0001foo0278,所有以 foo 开头的文件都被重命名。

rename foo0 foo foo0[2]*

foo0200foo0278 的所有文件都被重命名为 foo200foo278,文件名中的 foo0 被替换为 foo

Perl 版本的 rename

参数格式:

rename [options] perlexpr files

rename 命令会根据指定的 perlexpr 正则表达式来重命名所有文件。

例:

|:-:|:-|
字母的替换 | rename "s/AA/aa/" * | 把文件名中的AA替换成aa
修改文件的后缀 |
rename "s/.html$/.php/" *
| 把.html 后缀的改成 .php后缀
批量添加文件后缀 | rename "s/$/.txt/" * | 把所有的文件名都以txt结尾
批量删除文件名 |
rename "s/.txt$//" *
| 把所有以.txt结尾的文件名的.txt删掉


Options

|:-:|:-|
-n | 用来测试 rename 过程,并不直接运行。

文章目录