zoukankan      html  css  js  c++  java
  • [记录]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

    得到的结果是:

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

    之前的:

     

    替换之后的:

  • 相关阅读:
    名字空间,L,E, G , B 作用域, 内置电池
    lambda表达式
    表达式与声明的区别。
    jupyter book的使用
    centos7一键安装cacti_1.2.16版本
    docker修改阿里云镜像加速器
    centos单网卡多ip,被动模式
    centos同步时间
    centos7.x制作bond
    centos 6.X制作bond
  • 原文地址:https://www.cnblogs.com/fsong/p/5262429.html
Copyright © 2011-2022 走看看