添加字符
舉例如下:批量創建10個隨機字符串的文件,要求每個文件名后面添加_aaa,后綴名不變;
[root@localhost goodboy]# ls
adddbbdedf.html baacjaiija.html bhcfaabcfh.html dgjdcdfbca.html efejadfdji.html
agdhcdeaje.html bgffbffjcg.html cbbiebdafh.html diadebbhag.html jcajafgejf.html
腳本1:
使用sed替換,正則表達式第1個()括號里面代表文件名即\1;中間. 使用\進行脫意,代表分隔符;
第2個括號里面代表后綴html內容即\2;
使用此方法需要在替換中添加.符號;
更改后的效果如下:
腳本2:
解釋說明:
同樣使用sed替換,正則表達式,與上面的區別在於第2個括號里面的內容,代表.html 分隔符和后綴名為一體,替換內容的話不需要再單獨加.點;.分隔符同樣需要使用\進行脫意;
可以使用sed -r參數,看起來就清爽很多,不需要\脫意;
mv $file `echo $file|sed -r 's/(.*)(\..*)/\1_aaa\2/g'`
刪除字符
舉例如下:批量改名,刪除文件名中多余字符
目錄下文件名為如下,要求去掉_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替換
[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改名(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.jpg
stu_102999_2.jpg
stu_102999_3.jpg
stu_102999_4.jpg
stu_102999_5.jpg