【Linux】一步一步学Linux——rename命令(36)

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删掉

05. 附录

参考:【Linux】一步一步学Linux系列教程汇总

参考 Perl版本:https://www.cnblogs.com/amosli/p/3491649.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值