rename perl版本将匹配的字符串和替换的字符串放在一个表达式中进行表述。
Linux中文件重命名
本文关于perl版本rename的部分来自博客 https://blog.csdn.net/wayne17/article/details/88674459 版权归原作者所有。在评论区也向大佬进行了请教,收获挺多。
linux中重命名有两种方法:
1.使用mv命令,mv命令是移动文件的命令,但同时也可以在移动文件的同时对文件进行重命名操作,但rename只适合单个文件的重命名,对于批量文件重命名无能为力;
1
mv file1 file2 # 实现单文件重命名
2.使用rename命令
rename命令目前有两种实现方式,一种是C语言版,采用通配符进行文件批量重命名,另一种则是Perl语言版,采用正则表达式进行文件批量重命名,也是目前的主流版本。
C语言版重命名十分方便,如要将所有文件的后缀从.txt改为.md,使用如下方式即可:
1
rename .txt .md *.txt
其它重命名的操作C语言也类似解决,通配符使用起来很简单方便。
Perl语言版是主流是一位Perl版rename支持强大正则表达式
Perl版rename使用格式如下1
rename 's/匹配输入/修改后的/' 匹配模式
举例子如下:
路径下有test1.txt, test2.txt, test3.txt
在每个文件开头加上my_,重命名为my_test1.txt, my_test2.txt, my_test3.txt, my_test4.txt。1
rename 's/^/my_/' *
其中^匹配输入开始的位置
在每个文件结尾添加新的后缀变成.txt.log
1
rename 's/$/\.log/' *
其中$匹配输入结束的位置
将文件名中第一个t变成大写T
1
rename 's/t/T/' *
将文件命中所有的t变成大写T
1
rename 's/t/T/g' *
后面加了个g代表global,匹配所有的。
将文件中所有小写字母变成大写字母
1
rename 'y/a-z/A-Z/' *
注意到前面的s/变成y/,其中s/代表将匹配的部分全部替换,而y/代表将匹配部分逐一替换,从上述可以看出区别。
其它有关rename Perl语言版的问题就是正则表达式的问题了,可以参考正则表达式的部分
https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md
https://regex101.com/r/V32Npg/1