[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称
因工作中需要将Flash转为Html5,并且要有动画效果,我将Flash的组件导出Png序列,然后将Png序列拼接成一张雪碧图(Sprite),名字为在生成雪碧图可以排序,需要改成数字名称。
而名字是可以在导出的时候进行设置的,想到这个的时候,两行泪水从眼中花落T_T,现在才发现,不过我清楚如何替换了.
文件名格式:Sprite 590000.png
文件夹文件的图片名称是:Sprite 590000.png至Sprite 590056.png
需求是将:Sprite 590000.png替换成590000.png
参考下面两个链接之后:
先是参考第一个,得出的myname.sh文件是:
#!/bin/ksh ls *.png | while read name do filename=${name%/*} base=${name##*/} ext=${base##*.} echo ${filename} echo ${base} echo ${ext} done
得到的结果是:
发现filename和base的值是一样的
把base,ext的代码都删除掉
看参考2中,有提到
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
1 #!/bin/ksh 2 ls *.png | while read name 3 do 4 filename=${name#Sprite } 5 echo ${filename} 6 done 7 ~ 8 ~
测试替换掉"Sprite ",
运行:sh myname.sh,结果是:
嗯,这个文件名称是我自己想要的,我尝试将"echo ${filename}"替换为"echo mv ${name} ${filename}"
1 #!/bin/ksh 2 ls *.png | while read name 3 do 4 filename=${name#Sprite } 5 echo mv $name ${filename} 6 done 7 ~
运行: sh myname.sh,结果是:
语法正确,将echo去掉,,提示
参考了1的echo语法,才发现是少了""号
1 #!/bin/ksh 2 ls *.png | while read name 3 do 4 filename=${name#Sprite } 5 mv "$name" "${filename}" 6 done
再次运行: sh myname.sh,再看文件夹,替换成功。
之前的:
替换之后的: