[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称

因工作中需要将Flash转为Html5,并且要有动画效果,我将Flash的组件导出Png序列,然后将Png序列拼接成一张雪碧图(Sprite),名字为在生成雪碧图可以排序,需要改成数字名称。

而名字是可以在导出的时候进行设置的,想到这个的时候,两行泪水从眼中花落T_T,现在才发现,不过我清楚如何替换了.

文件名格式:Sprite 590000.png

文件夹文件的图片名称是:Sprite 590000.png至Sprite 590056.png

需求是将:Sprite 590000.png替换成590000.png

参考下面两个链接之后:

  1. Shell - Change file name without changing extension from a given path

  2. shell变量里的字符替换

先是参考第一个,得出的myname.sh文件是:

#!/bin/ksh
ls *.png | while read name
do
filename=${name%/*}
base=${name##*/}
ext=${base##*.}
echo ${filename}
echo ${base}
echo ${ext}
done

得到的结果是:

[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称

发现filename和base的值是一样的

把base,ext的代码都删除掉

看参考2中,有提到

我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt

 #!/bin/ksh
ls *.png | while read name
do
filename=${name#Sprite }
echo ${filename}
done
~
~

测试替换掉"Sprite ",

运行:sh myname.sh,结果是:

[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称

嗯,这个文件名称是我自己想要的,我尝试将"echo ${filename}"替换为"echo mv ${name} ${filename}"

 #!/bin/ksh
ls *.png | while read name
do
filename=${name#Sprite }
echo mv $name ${filename}
done
~

运行: sh myname.sh,结果是:

[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称

语法正确,将echo去掉,,提示

[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称

参考了1的echo语法,才发现是少了""号

 #!/bin/ksh
ls *.png | while read name
do
filename=${name#Sprite }
mv "$name" "${filename}"
done

再次运行: sh myname.sh,再看文件夹,替换成功。

之前的:

[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称

替换之后的:

[记录]Ubuntu下,使用Shell,简单替换有规律的文件名称

上一篇:【转】 Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)


下一篇:hdu2243考研路茫茫——单词情结