在上一篇文章中,我写了批量修改文件名(在文件名中添加文字),但是在工作中也有批量修改文件名,删除文件名部分文字的需求
例如,一并变更名称,从文件名中删除多馀字符
以下目录名称如下: 必须删除_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
有几个可以实现的方法。
方法1 )结合for循环和sed,使用[ twdjqm @ localhost (] $ for file in ` ls *.jpg `; domv $ file ` echo $ file|sed ' s/_ finished//g '; 东;
方法二: ls与awk结合,输出交给bash执行[ twdjqm @ localhost~] $ ls *.jpg|awk-f ' _ finished ' { print ' mv ' $0' $1$2]
实际执行的指令如下所示。 _finished作为分隔符,mv和变量包括双引号[ twdjqm @ localhost~] $ ls *.jpg|awk-f ' _ finished ' { print ' mv ' $0' }
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改名[ twdjqm @ localhost~] $ rename ' _ finished ' ' *.jpg
方法四、for循环加变量部分剪切[ twdjqm @ localhost~] $ for file in ` ls *.jpg `; domv $ file ` echo $ { file % _ finished * }.jpg `; 东;
不用echo也可以[ twdjqm @ localhost~~ ] $ for file in ` ls *.jpg `; domv $ file $ { file % _ finished * }.jpg; 东;
变更后的结果如下
stu _ 102999 _1. jpg stu _ 102999 _2. jpg stu _ 102999 _3. jpg stu _ 102999 _4. jpg stu _ 102999 _5. jpg