有的时候我们需要批量创建文件做测试,为了做区分,一般只要稍稍动动文件名即可,MV命令既可以移动文件,也是可以修改文件名的,但批量修改文件名MV做不到,此时,我们可以用rename命令批量修改是蛮不错的方法,当然也有其他方法的,具体如下:
语法:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
白话文:rename 参数 需要替换的字符串 含有的原字符替换成目标字符串 指定要改变文件名的文件列表或脚本
常用参数介绍:
-v 显示修改成功的文件名
-n 不执行任何操作,用来测试rename过程,不直接运行,可以查看测试效果后,然后再运行
-f 强制修改已经存在的文件
Linux的rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了,因为Perl版本的支持正则处理,所以功能更加强大,基本上现在linux下默认的rename命令都是Perl版的。
例如:将一下bqh目录下的所有文件名带有"_finished"的去掉。
方法1:用rename命令
rename "_finished" "" *.jpg
方法二:用sed命令
f=stu_1218_1_finished.jpg
echo $f|sed 's#_finished##g'
mv $f `echo $f|sed 's#_finished##g'`
也可以写个脚本:
- #!/bin/sh
- for f in `ls *finish*.jpg`
- do
- mv $f `echo $f|sed 's#_finished##g'`
- done
也可以用此命令批量替换:
ls|sed -r 's#(^.*)_finished.*$#mv & \1.jpg#'|bash
方法三:用awk命令
ls *.jpg|awk -F "_finished" '{print "mv " $0,$1$2}'|bash
通过以上方法来说,还是rename命令相对简单,可以根据场景需求而选。