shell脚本:批量修改文件名(删除文件名中字符)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本:批量修改文件名(删除文件名中字符)相关的知识,希望对你有一定的参考价值。
上一篇写过批量修改文件名(文件名中添加字符),工作中还存在这样的需求,批量修改文件名,删除文件名中的某些字符;
举例如下:批量改名,删除文件名中多余字符
目录下文件名为如下,要求去掉_finished。
stu_102999_1_finished.jpg
stu_102999_2_finished.jpg
stu_102999_3_finished.jpg
stu_102999_4_finished.jpg
stu_102999_5_finished.jpg
可以实现的方法有很多种:
方法一:for循环结合sed替换
[[email protected] ~]$ for file in `ls *.jpg`;do mv $file `echo $file|sed ‘s/_finished//g‘`;done;
方法二:ls结合awk,输出交给bash执行
[[email protected] ~]$ ls *.jpg |awk -F "_finished" ‘{print "mv "$0" "$1$2""}‘|bash
实际执行的命令如下,以_finished作为分隔符,mv及变量 需要加双引号
[[email protected] ~]$ 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改名
[[email protected] ~]$ rename "_finished" "" *.jpg
方法四:for循环加变量部分截取
[[email protected] ~]$ for file in `ls *.jpg`;do mv $file `echo ${file%_finished*}.jpg`;done;
不使用echo也可以实现
[[email protected] ~]$ for file in `ls *.jpg`;do mv $file ${file%_finished*}.jpg;done;
更改后结果如下:
stu_102999_1.jpg
stu_102999_2.jpg
stu_102999_3.jpg
stu_102999_4.jpg
stu_102999_5.jpg
本文出自 “模范生的学习博客” 博客,请务必保留此出处http://mofansheng.blog.51cto.com/8792265/1743432
以上是关于shell脚本:批量修改文件名(删除文件名中字符)的主要内容,如果未能解决你的问题,请参考以下文章