From:http://www.javashuo.com/article/p-dfwdewiw-v.htmlhtml
rename与mv的区别就是mv只能对单个文件重命名,而rename能够批量修改文件名linux
linux中的rename有两种版本,一种是C语言版的,一种是Perl版的,如何区分系统里的rename是哪一个版本的,能够经过一下方式:正则表达式
输入man rename 看到第一行中包含Linux Programmer’s Manual时,这就是C语言版本的,若是第一行中包含 Perl Programmers Reference Guide,则就是Perl版本的。ide
替换 rename 's/.rtv.txt.kml/.kml/' *.kml 或者rename 's/foo0/foo/' foo0[2]* 将foo02开头的文件名中的foo0替换为fooui
删除某些字符 rename 's/gps_//' *.kml或者rename 's/.bak$//' *.bakspa
其中,?可替代单个字符*可替代多个字符,三种通配符能够一块儿结合使用。命令行
实例:htm
把全部文件名内含有大小字母的,修改成小写字母:rename 'y/A-Z/a-z/' *.txt 对象
linux中容许文件名中包含空格,但文件名中有空格时,在命令行调用文件时要将文件名用双引号引发来或者对空格进行转义才能行,去除文件名中空格的实现命令有如下两种方式:blog
rename 's/^/hello/' * 统一在文件头部添加上hello
rename 's/.html$/.htm/' * 统一把.html扩展名修改成.htm
rename 's/$/.zip/' * 统一在尾部追加.zip后缀:
rename 's/.zip$//' * 统一去掉.zip后缀
规则化数字编号名,好比1.jpg, 2.jpg ..... 100.jpg , 如今要使文件名所有三位即1.jpg .... 001.jpg,运行两次命令:
rename 原字符串 需改为的字符串 须要修改的文件
rename 'test' 'tast' *.txt,将文件名中的test改成tast
rename .jpeg.jpg *.jpeg 修改文件的扩展名
总的来讲:rename C语言版本所能实现的功能:批量修改文件名,结果是每一个文件会被相同的一个字符串替换掉!也就是说,没法实现诸如循环 而后按编号重命名等
1.批量修改文件前缀
场景:folder A中有a.rtv b.a.c.imu a.t.gps a.y.ew.imu等等,想要将这些文件的文件名统一为test,后缀保持不变
通常的思路:
遍历folder,依次获取文件 ---> 获取文件后缀${pre}--->使用mv ${file} test.${pre}
该方法中没有文件都要获取后缀再执行mv命令,灰常复杂
rename方法:rename 's/.*\./test./' *便可,其中.*\.中.*表明匹配屡次单个字符,\.表明对点进行转义。