题目

[root@show day74]# touch {00..10}.html
[root@show day74]# ls
00.html  01.html  02.html  03.html  04.html  05.html  06.html  07.html  08.html  09.html  10.html

我想把这些文件批量重命名为 00.jpg …..10.jpg,请问如何操作

参考答案:

方法一:rename 命令

[root@show day74]# rename .html .jpg *.html
[root@show day74]# ls
00.jpg  01.jpg  02.jpg  03.jpg  04.jpg  05.jpg  06.jpg  07.jpg  08.jpg  09.jpg  10.jpg

方法二:sed或awk命令拼接

[root@show day74]# ls
00.html  01.html  02.html  03.html  04.html  05.html  06.html  07.html  08.html  09.html  10.html

sed命令拼接

[root@show day74]# ls *.html |sed -r 's#(^[0-9]*).*#mv \1.html \1.jpg#'mv 00.html 00.jpg
mv 01.html 01.jpg
mv 02.html 02.jpg
mv 03.html 03.jpg
mv 04.html 04.jpg
mv 05.html 05.jpg
mv 06.html 06.jpg
mv 07.html 07.jpg
mv 08.html 08.jpg
mv 09.html 09.jpg
mv 10.html 10.jpg
[root@show day74]# ls *.html |sed -r 's#(^[0-9]*).*#mv \1.html \1.jpg#e'

awk命令拼接

[root@show day74]# ls *.html|awk -F. '{print "mv",$1".html",$1".jpg"}'mv 00.html 00.jpg
mv 01.html 01.jpg
mv 02.html 02.jpg
mv 03.html 03.jpg
mv 04.html 04.jpg
mv 05.html 05.jpg
mv 06.html 06.jpg
mv 07.html 07.jpg
mv 08.html 08.jpg
mv 09.html 09.jpg
mv 10.html 10.jpg
[root@show day74]# ls *.html|awk -F. '{print "mv",$1".html",$1".jpg"}'|bash
[root@show day74]# ls
00.jpg  01.jpg  02.jpg  03.jpg  04.jpg  05.jpg  06.jpg  07.jpg  08.jpg  09.jpg  10.jpg

方法三:shell编程

[root@show day74]# for name in `ls *.html`;do echo $name ${name%.html}.jpg;done
00.html 00.jpg
01.html 01.jpg
02.html 02.jpg
03.html 03.jpg
04.html 04.jpg
05.html 05.jpg
06.html 06.jpg
07.html 07.jpg
08.html 08.jpg
09.html 09.jpg
10.html 10.jpg
[root@show day74]# for name in `ls *.html`;do mv $name ${name%.html}.jpg;done
[root@show day74]# ls 
00.jpg  01.jpg  02.jpg  03.jpg  04.jpg  05.jpg  06.jpg  07.jpg  08.jpg  09.jpg  10.jpg

网友回答:

[root@show day74]# for n in {00..10};do mv $n.html $n.jpg ;done 
[root@show day74]# ls
00.jpg  01.jpg  02.jpg  03.jpg  04.jpg  05.jpg  06.jpg  07.jpg  08.jpg  09.jpg  10.jpg

备注

今天是每日一题陪伴大家的第74天,期待你的进步。
对于题目和答案的任何疑问,请在博客评论区留言。
往期题目索引
http://lidao.blog.51cto.com/3388056/1914205