用途:更改文件名(一般是批量更改,如果你闲的没事的话改一个也行)
特点:轻量易用 功能强大
欢迎提出修改
- 安装最新版本的 python3(如果没有的话)
- 下载 rename.py
- 将 rename.py 的路径添加到系统环境变量
检验是否安装成功
命令行输入(注意前面的$是命令行标志,不需要输入):
$ rename.py -h
如果出现帮助信息,即代表安装成功
在你想要的路径打开命令行
如果你有五个文件:
$ ls
hel.txt ld.txt lo.txt r.txt wo.txt
想把他们都命名为 helloworld
那么只需要:
$ rename.py -n helloworld
查看一下,发现已经改过来了
$ ls
helloworld0.txt helloworld2.txt helloworld4.txt
helloworld1.txt helloworld3.txt
-n
代表新文件名。默认情况下,rename 会选择所有文件,更名为新文件名,并按照输入顺序标好序号,更名过程默认不会修改拓展名
如果说,不想以 0 为开头,可以-c
设置起始数字
$ rename.py -n hello -c 1
$ ls
hello1.txt hello2.txt hello3.txt hello4.txt hello5.txt
注意:已经有同名文件情况下重命名,程序会报错。如果想这么做,可以先批量换成另一个名字,这时同名文件消失,便可重命名,或者使用其他修改操作,而不是新文件名操作
如果说,领导让你做双周的周报,所有文件都是双数,那么也可以,-T
可以设置步长(大小写不可以互换)
$ rename.py -n world -c 2 -T 2
$ ls
world10.txt world2.txt world4.txt world6.txt world8.txt
这时候你说,我是强迫症患者,10 和 2 位数不一样,也好办。我们只要-t
指定数字的格式就好,fillzero
表示在前面填充 0 补齐数字(没有括号空格等特殊符号时候引号可以省略。也可以是双引号)
$ rename.py -n hello -c 2 -T 2 -t 'fillzero'
$ ls
hello02.txt hello04.txt hello06.txt hello08.txt hello10.txt
如果你说,我写的是小说,我希望写汉字,-t
指定数字格式为chinese
即可
$ rename.py -n 红楼梦 -c 2 -T 2 -t chinese
$ ls
红楼梦二.txt 红楼梦八.txt 红楼梦六.txt 红楼梦十.txt 红楼梦四.txt
补充:-t
还有英语english
,罗马数字roman
等格式
你说,不对啊,小说的标题不是这么写的,
小说标题一般在前面。新文件名支持指定序号的位置,用%d 代替序号即可
$ rename.py -n 第%d章红楼梦 -c 2 -T 2 -t chinese
$ ls
第二章红楼梦.txt 第六章红楼梦.txt 第四章红楼梦.txt
第八章红楼梦.txt 第十章红楼梦.txt
然后你说,这么搞不厚道啊。我小说每一章都有自己的名字,到你这里都变成红楼梦了
好,假定你有以下小说:
$ ls
东京八十万禁军教头贾母.txt 林黛玉倒拔垂杨柳.txt 贾宝玉风雪山神庙.txt
刘姥姥初试云雨情.txt 薛宝钗拳打郑关西.txt
想要保留原来的名字,只需要%s 代替原来的名字即可
$ rename.py -n '第%d章 %s' -t chinese -c 1
$ ls
'第一章 东京八十万禁军教头贾母.txt' '第五章 贾宝玉风雪山神庙.txt'
'第三章 林黛玉倒拔垂杨柳.txt' '第四章 薛宝钗拳打郑关西.txt'
'第二章 刘姥姥初试云雨情.txt'
可以看到,名字已经完全改好了。但疑问又来了:
正确的顺序是林黛玉倒拔垂杨柳,薛宝钗拳打镇关西,贾宝玉风雪山神庙,东京八十万禁军教头贾母,刘姥姥初尝云雨情
你这么一操作顺序全乱了,还得我人工一个个纠正
其实 rename 提供排序操作,让我们回到这五个小说还没有被改名的时候
$ ls
东京八十万禁军教头贾母.txt 林黛玉倒拔垂杨柳.txt 贾宝玉风雪山神庙.txt
刘姥姥初试云雨情.txt 薛宝钗拳打郑关西.txt
使用-m
指定排序类型mtime
(最后修改时间)(我们假定你的小说是按顺序写好的)
$ rename.py -n '第%d章 %s' -t chinese -c 1 -m mtime
$ ls
'第一章 林黛玉倒拔垂杨柳.txt' '第五章 刘姥姥初试云雨情.txt'
'第三章 贾宝玉风雪山神庙.txt' '第四章 东京八十万禁军教头贾母.txt'
'第二章 薛宝钗拳打郑关西.txt'
可以看到,文件按照正确的顺序命名了
补充:排序类型有很多,可以-h
查看帮助了解。可以设置-o
为desc
,将升序变成倒叙
警告:排序数字有上限,数字过大(大概是亿以上)会出错,不过你要是真能塞下上亿的文件在一个文件夹里,也不会需要我这个小脚本了
我们上面已经初步了解了 rename。但是你已经发觉了,上面都是对一个文件夹里的所有文件进行操作
假定我有以下文件:
$ ls
东京八十万禁军教头贾母.txt 曹仁.txt 林黛玉倒拔垂杨柳.txt
刘姥姥初试云雨情.txt 曹操.txt 薛宝钗拳打郑关西.txt
曹真.txt 曹爽.txt 贾宝玉风雪山神庙.txt
我只想给曹家父子加个编号。这时候就要用到 filename 操作了
filename 是第一个参数(通常情况),省略的情况下会对所有文件进行操作
这里我们使用 linux 通配符将所有姓曹的筛选出来,给他们加个数字小尾巴:
$ rename.py 曹* -n %s%d -m mtime
$ ls
东京八十万禁军教头贾母.txt 曹仁1.txt 林黛玉倒拔垂杨柳.txt
刘姥姥初试云雨情.txt 曹操0.txt 薛宝钗拳打郑关西.txt
曹真2.txt 曹爽3.txt 贾宝玉风雪山神庙.txt
可以看到,只有曹家父子被我们标上了号
关于 linux 通配符其实只有三种主要操作:星号(*)匹配零个或多个任意字符、问号(?)匹配零个或不多于问号个数的任意字符。方括号([和])括起来的字符范围匹配在此范围内的任意字符。其余可自行上网了解
有人会吐槽说,通配符太难了或者太麻烦了,rename 提供更简单的方式,直接输入部分文件名,也可以将文件筛选出来。比如我们将带玉的名字选出来加个情侣后缀
$ rename.py 玉 -n %s【情侣】
$ ls
东京八十万禁军教头贾母.txt 曹操0.txt 林黛玉倒拔垂杨柳【情侣】.txt
刘姥姥初试云雨情.txt 曹爽3.txt 薛宝钗拳打郑关西.txt
曹仁1.txt 曹真2.txt 贾宝玉风雪山神庙【情侣】.txt
有人说,你这么选择太简单了,我需要更强大的选择方式。那么你可以用正则表达式命令-r
(只需要部分匹配即可搜到)
比如,我们将含有叠字的文件名取出来,加个叠字后缀:
$ rename.py -r '(\w)\1+' -n %s【叠字】
$ ls
东京八十万禁军教头贾母.txt 曹操0.txt 林黛玉倒拔垂杨柳【情侣】.txt
刘姥姥初试云雨情【叠字】.txt 曹爽3.txt 薛宝钗拳打郑关西.txt
曹仁1.txt 曹真2.txt 贾宝玉风雪山神庙【情侣】.txt
现在我们发现,添加后缀的操作很常见,但是-n %s【叠字】
这样的操作略微有些冗余,所以我们可以用+s
操作添加后缀
$ rename.py +s 后缀哦
$ ls
东京八十万禁军教头贾母后缀哦.txt 曹真2后缀哦.txt
刘姥姥初试云雨情【叠字】后缀哦.txt 林黛玉倒拔垂杨柳【情侣】后缀哦.txt
曹仁1后缀哦.txt 薛宝钗拳打郑关西后缀哦.txt
曹操0后缀哦.txt 贾宝玉风雪山神庙【情侣】后缀哦.txt
曹爽3后缀哦.txt
我们可以用+s
加后缀,-s
减后缀,+p
加前缀,-p
减前缀
我们发现,老曹家的名字很特别,所以用-p
操作减掉所有曹
的前缀
$ rename.py -p 曹
$ ls
东京八十万禁军教头贾母后缀哦.txt 爽3后缀哦.txt
仁1后缀哦.txt 真2后缀哦.txt
刘姥姥初试云雨情【叠字】后缀哦.txt 薛宝钗拳打郑关西后缀哦.txt
操0后缀哦.txt 贾宝玉风雪山神庙【情侣】后缀哦.txt
林黛玉倒拔垂杨柳【情侣】后缀哦.txt
可以看到,所有曹前缀都消失了
不对。这么操作只能选择删除某些前缀,我想按照固定数量删除前后缀怎么办
可以用-S
切片操作,切片参数最多包含两个参数,(从 0 开始计算)起始位置(包括起始位置),结束位置(不包括结束位置)(若省略则直到末尾)
让我们回到那个比较整洁的版本
$ ls
东京八十万禁军教头贾母.txt 林黛玉倒拔垂杨柳.txt 贾宝玉风雪山神庙.txt
刘姥姥初试云雨情.txt 薛宝钗拳打郑关西.txt
$ rename.py -S 1
$ ls
京八十万禁军教头贾母.txt 宝玉风雪山神庙.txt 黛玉倒拔垂杨柳.txt
姥姥初试云雨情.txt 宝钗拳打郑关西.txt
试着截取 0-5
$ rename.py -S 0 5
$ ls
京八十万禁.txt 姥姥初试云.txt 宝玉风雪山.txt 宝钗拳打郑.txt 黛玉倒拔垂.txt
现在我们又有了新的疑惑,黛玉怎么能倒拔垂杨柳呢?应该是袭人倒把垂杨柳,这时可以用-a
替换操作
$ rename.py -a 黛玉 袭人
$ ls
京八十万禁.txt 姥姥初试云.txt 宝玉风雪山.txt 宝钗拳打郑.txt 袭人倒拔垂.txt
当然-a 也是批量操作,只是我们这里恰好只有一个黛玉
补充:-a
只是简单替换,-R
可使用正则表达式(全部匹配)进行替换
你也可以删掉郑,让宝钗打空气
$ rename.py -d 郑
$ ls
京八十万禁.txt 姥姥初试云.txt 宝玉风雪山.txt 宝钗拳打.txt 袭人倒拔垂.txt
假如你在网上下载了一些英语课程,已经自动编号了
$ ls
lesson0.txt lesson1.txt lesson2.txt lesson3.txt lesson4.txt
这下没法用到我们的自动编号功能了。想用别的编号类型就麻烦了
没关系,可以使用-N
替换数字功能,第一个参数是正则表达式(全部匹配),第二个参数是要替换的类型
$ rename.py -N '\d' english
$ ls
lessonfour.txt lessonone.txt lessonthree.txt lessontwo.txt lessonzero.txt
最后,以上操作都是对文件名的操作,如果想更改后缀,可以用-e
$ rename.py -e .md
$ ls
lessonfour.md lessonone.md lessonthree.md lessontwo.md lessonzero.md
当然你省略掉后缀的'.'也是没问题的
注意:以上所有操作如果有多个操作同时输入,将按照默认顺序一一进行,默认顺序请参照帮助界面。如果同一个操作输入多次,只会按照最后一次输入进行操作。如果用户多个操作之间发生矛盾(比如先删了关键词然后后面替换时候搜索不到),程序会崩溃,这个就请自己担待吧