zl程序教程

您现在的位置是:首页 >  系统

当前栏目

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

Ubuntushell 简单 记录 替换 规律 使用
2023-09-11 14:20:10 时间

因工作中需要将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

得到的结果是:

发现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,再看文件夹,替换成功。

之前的:

 

替换之后的: