shell脚本:批量修改文件名(删除文件名中字符)

shell脚本:批量修改文件名(文件名中添加字符)shell


上一篇写过批量修改文件名(文件名中添加字符),工做中还存在这样的需求,批量修改文件名,删除文件名中的某些字符;bash

举例以下:批量更名,删除文件名中多余字符ide

目录下文件名为以下,要求去掉_finished。url

stu_102999_1_finished.jpgspa

stu_102999_2_finished.jpg
blog

stu_102999_3_finished.jpg
get

stu_102999_4_finished.jpg
it

stu_102999_5_finished.jpg
for循环


能够实现的方法有不少种:class

方法一:for循环结合sed替换

[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file `echo $file|sed 's/_finished//g'`;done;


方法二:ls结合awk,输出交给bash执行

[baby@localhost ~]$ ls *.jpg |awk -F "_finished" '{print "mv "$0" "$1$2""}'|bash


实际执行的命令以下,以_finished做为分隔符,mv及变量 须要加双引号

[baby@localhost ~]$ ls *.jpg |awk -F "_finished" '{print "mv "$0" "$1$2""}'
mv stu_102999_1_finished.jpg stu_102999_1.jpg
mv stu_102999_2_finished.jpg stu_102999_2.jpg
mv stu_102999_3_finished.jpg stu_102999_3.jpg
mv stu_102999_4_finished.jpg stu_102999_4.jpg
mv stu_102999_5_finished.jpg stu_102999_5.jpg


方法三:rename更名

[baby@localhost ~]$ rename "_finished" "" *.jpg

spacer.gif

方法四:for循环加变量部分截取

[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file `echo ${file%_finished*}.jpg`;done;

不使用echo也能够实现

[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file ${file%_finished*}.jpg;done;

更改后结果以下:

stu_102999_1.jpgstu_102999_2.jpgstu_102999_3.jpgstu_102999_4.jpgstu_102999_5.jpg

相关文章
相关标签/搜索