700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c 语言 批量更改文件名 rename 批量修改文件名

c 语言 批量更改文件名 rename 批量修改文件名

时间:2020-11-17 05:20:56

相关推荐

c 语言 批量更改文件名 rename 批量修改文件名

rename与mv的区别就是mv只能对单个文件重命名,而rename可以批量修改文件名

linux中的rename有两种版本,一种是C语言版的,一种是Perl版的,如何区分系统里的rename是哪个版本的,可以通过一下方式:

输入man rename 看到第一行中包含Linux Programmer’s Manual时,这就是C语言版本的,如果第一行中包含Perl Programmers Reference Guide,则就是Perl版本的。

Perl语言版本的rename用法

perl版本的rename同sed中的语法类似,rename perl正则表达式 待处理的文件

替换 rename 's/.rtv.txt.kml/.kml/' *.kml 或者rename 's/foo0/foo/' foo0[2]* 将foo02开头的文件名中的foo0替换为foo

删除某些字符 rename 's/gps_//' *.kml或者rename 's/.bak$//' *.bak

其中,?可替代单个字符*可替代多个字符,三种通配符可以一起结合使用。

实例:

把所有文件名内含有大小字母的,修改为小写字母:rename 'y/A-Z/a-z/'*.txt

linux中允许文件名中包含空格,但文件名中有空格时,在命令行调用文件时要将文件名用双引号引起来或者对空格进行转义才能行,去除文件名中空格的实现命令有以下两种方式:

find . -type f -name "* *" -print |while read name; do mv "${name}" `echo "${name}"|sed "s/[ ]\+/_/g"`;done

rename "s/[ ]+/_/g" *

其中[ ]+表示空格出现一次或多次,空格可以用[:space:]代替,该命令可替换为[[:space:]]+

在sed中需要将+转义,但在rename中不能转义,因为rename 采用的是标准perl正则语法

从命令中能够看到sed与rename的区别,rename处理的是*所能匹配到的该目录下的所有文件,它将所有文件名作为处理的对象,而命令sed 处理逻辑 文件名时,sed 处理的是文件内容,所以只能通过echo "文件名"|sed "s/[ ]\+/_/g的方式才能处理文件名

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 's/^/00/' [0-9].jpg # 这一步把1.jpg ..... 9.jpg 变幻为001.jpg .... 009.jpg

rename 's/^/0/'[0-9][0-9].jpg# 这一步把10.jpg ..... 99.jpg 变幻为010.jpg ..... 090.jpg

C语言版本rename的用法

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./' *即可,其中.*\.中.*代表匹配多次单个字符,\.代表对点进行转义。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。