需求:批量的将系统文件中的文件名Drugs去掉。
①创建测试文件
touch
sta_20190726_drugs.jpg
sta_20190727_drugs.jpg
sta_20190728_drugs.jpg
sta_20190729_drugs.jpg
sta_20190730_drugs.jpg
sta_20190731_drugs.jpg
②批量删除之前需要知道单个修改文件名的方法:
[root@6 tmp]# mv sta_20190726_drugs.jpg sta_20190726_jpg
③利用变量赋值和替换的方式实现mv命令批量改名的需求:
[root@6 tmp]# dg="sta_20190726_drugs.jpg"
[root@6 tmp]# echo ${dg//_drugs/}
sta_20190726.jpg
[root@6 tmp]# mv $dg `echo ${dg//_drugs/}`
如图所示:结果显示单个文件利用变量赋值和替换的方式处理掉了。
④单单处理一个是不够得,进行批量处理,利用循环语句去解决!
[root@6 tmp]# for dg in `ls *.jpg`;do mv $dg `echo ${dg//_drugs/}`;done
如图所示:其中有一个报错不用去管他,因为之前已经改过了一个文件了,查看其他文件名已被改过来了
当然,还可以利用rename更高效的去解决这个需求,先创建测试文件。
[root@6 tmp]# rename "drugs" "" *.jpg
需求2:利用变量子串中替换的方法将文件中后缀名小写改为大写的后缀名
①创建多个测试文件:
[root@6 tmp]# touch {a..d}.html
②单个文件利用变量子串//替换演示:将结尾的html替换成HTML
[root@6 tmp]# echo ${HT/%html/HTML}
[root@6 tmp]# mv $HT ${HT/%html/HTML}
举一反三,要想替换文件名,加上#即可:
[root@6 tmp]# echo ${HT/#a/A}
③利用for循环,批量更改后缀名:
[root@6 tmp]# for HT in `ls *.html`;do mv $HT ${HT/%html/HTML};done
也可用renma去解决:[root@6 tmp]# rename ".HTML" ".html" *.HTML