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./' *便可,其中.*\.中.*表明匹配屢次單個字符,\.表明對點進行轉義。