[Linux] rename 批量重命名文件
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?
foo1 到 foo9 的文件被重命名为 foo01 到 foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的 foo 被替换为 foo0。
rename foo foo0 foo??
foo01 到 foo99 的所有文件都被重命名为 foo001 到 foo099,只重命名5个字符长度名称的文件,文件名中的 foo 被替换为 foo0。
rename foo foo0 foo*
foo001 到 foo278 的所有文件都被重命名为 foo0001 到 foo0278,所有以 foo 开头的文件都被重命名。
rename foo0 foo foo0[2]*
从 foo0200 到 foo0278 的所有文件都被重命名为 foo200 到 foo278,文件名中的 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
过程,并不直接运行。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭