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
方法四: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