00. 目录
01. 命令概述
rename命令用字符串替换的方式批量改变文件名。
rename 用于 对文件进行命名管理,可进行批量命名并支持正则表达式, rename命令存在两个版本用法上有所区别 一个是 C语言版本支持通配符,另一个是 Perl版本.支持正则表达式
02. 命令格式
rename [选项] 表达式 替换文件…
rename [options] expression replacement file…
expression 将文件名需要替换的字符串
replacement 将文件名中含有的原字符替换成目标字符串
file 指定要改变文件名的文件列表
03. 常用选项
-v, --verbose 解释正在进行的操作
-s, --symlink 在符号链接上执行
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
【常用通配符说明】
? 表示一个任意字符
* 表示一个或一串任意字符
-------------------------------------------------
【常用正则表达式符号说明】
^ 匹配输入的开始位置
$ 匹配输入的结尾
. 匹配除换行符外的任意字符
+ 匹配前一个字符一次或多次 例如,"zo+"可以匹配"zoo",但不匹配"z"
[a-z] 表示某个范围内的字符,例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
[^m-z] 否定的字符区间。与不在指定区间内的字符匹配。
04. 参考示例
rename支持通配符
? 可替代单个字符
* 可替代多个字符
[charset] 可替代charset集中的任意单个字符
4.1 将当前目录下所有.txt文件中的.txt替换成.doc
[deng@localhost test]$ ls
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
[deng@localhost test]$ rename .txt .doc *.txt
[deng@localhost test]$ ls
10.doc 1.doc 2.doc 3.doc 4.doc 5.doc 6.doc 7.doc 8.doc 9.doc
[deng@localhost test]$
4.2 将main1.c重命名为main.c
[deng@localhost test]$ touch main1.c
[deng@localhost test]$ rename main1.c main.c main1.c
[deng@localhost test]$ ls
main.c
[deng@localhost test]$
4.3 将foo?所有出现foo的部分替换成foo0
如果使用rename foo foo0 foo?
,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。
[deng@localhost test]$ ls foo?
foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9
[deng@localhost test]$ rename foo foo0 foo?
[deng@localhost test]$ ls foo0?
foo01 foo02 foo03 foo04 foo05 foo06 foo07 foo08 foo09
[deng@localhost test]$
4.4 rename foo foo0 foo??
如果使用rename foo foo0 foo??
,foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。
[deng@localhost test]$ ls foo??
foo01 foo10 foo19 foo28 foo37 foo46 foo55 foo64 foo73 foo82 foo91
foo02 foo11 foo20 foo29 foo38 foo47 foo56 foo65 foo74 foo83 foo92
foo03 foo12 foo21 foo30 foo39 foo48 foo57 foo66 foo75 foo84 foo93
foo04 foo13 foo22 foo31 foo40 foo49 foo58 foo67 foo76 foo85 foo94
foo05 foo14 foo23 foo32 foo41 foo50 foo59 foo68 foo77 foo86 foo95
foo06 foo15 foo24 foo33 foo42 foo51 foo60 foo69 foo78 foo87 foo96
foo07 foo16 foo25 foo34 foo43 foo52 foo61 foo70 foo79 foo88 foo97
foo08 foo17 foo26 foo35 foo44 foo53 foo62 foo71 foo80 foo89 foo98
foo09 foo18 foo27 foo36 foo45 foo54 foo63 foo72 foo81 foo90 foo99
[deng@localhost test]$ rename foo foo0 foo??
[deng@localhost test]$ ls foo0??
foo001 foo012 foo023 foo034 foo045 foo056 foo067 foo078 foo089
foo002 foo013 foo024 foo035 foo046 foo057 foo068 foo079 foo090
foo003 foo014 foo025 foo036 foo047 foo058 foo069 foo080 foo091
foo004 foo015 foo026 foo037 foo048 foo059 foo070 foo081 foo092
foo005 foo016 foo027 foo038 foo049 foo060 foo071 foo082 foo093
foo006 foo017 foo028 foo039 foo050 foo061 foo072 foo083 foo094
foo007 foo018 foo029 foo040 foo051 foo062 foo073 foo084 foo095
foo008 foo019 foo030 foo041 foo052 foo063 foo074 foo085 foo096
foo009 foo020 foo031 foo042 foo053 foo064 foo075 foo086 foo097
foo010 foo021 foo032 foo043 foo054 foo065 foo076 foo087 foo098
foo011 foo022 foo033 foo044 foo055 foo066 foo077 foo088 foo099
[deng@localhost test]$
4.5 rename foo foo0 foo*
如果使用rename foo foo0 foo*
,foo001到foo100的所有文件都被重命名为foo0001到foo0100,所有以foo开头的文件都被重命名。
[deng@localhost test]$ rename foo foo0 foo*
[deng@localhost test]$ ls
foo0001 foo0014 foo0027 foo0040 foo0053 foo0066 foo0079 foo0092
foo0002 foo0015 foo0028 foo0041 foo0054 foo0067 foo0080 foo0093
foo0003 foo0016 foo0029 foo0042 foo0055 foo0068 foo0081 foo0094
foo0004 foo0017 foo0030 foo0043 foo0056 foo0069 foo0082 foo0095
foo0005 foo0018 foo0031 foo0044 foo0057 foo0070 foo0083 foo0096
foo0006 foo0019 foo0032 foo0045 foo0058 foo0071 foo0084 foo0097
foo0007 foo0020 foo0033 foo0046 foo0059 foo0072 foo0085 foo0098
foo0008 foo0021 foo0034 foo0047 foo0060 foo0073 foo0086 foo0099
foo0009 foo0022 foo0035 foo0048 foo0061 foo0074 foo0087 foo0100
foo0010 foo0023 foo0036 foo0049 foo0062 foo0075 foo0088 main.c
foo0011 foo0024 foo0037 foo0050 foo0063 foo0076 foo0089
foo0012 foo0025 foo0038 foo0051 foo0064 foo0077 foo0090
foo0013 foo0026 foo0039 foo0052 foo0065 foo0078 foo0091
[deng@localhost test]$
4.6 rename foo foo0 foo[1-9]*
如果使用rename foo foo0 foo[1-9]*
,从foo1到foo9的所有文件都被重命名为foo01到foo09,文件名中的foo被替换为foo0。
[deng@localhost test]$ ls
foo1 foo10 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9
[deng@localhost test]$ rename foo foo0 foo[1-9]*
[deng@localhost test]$ ls
foo01 foo010 foo02 foo03 foo04 foo05 foo06 foo07 foo08 foo09
[deng@localhost test]$
rename支持正则表达式
4.7 字母的替换
rename "s/AA/aa/" * //把文件名中的AA替换成aa
4.8 修改文件的后缀
rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
4.9 批量添加文件后缀
rename "s/$//.txt/" * //把所有的文件名都以txt结尾
4.10 批量删除文件名
rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉