zoukankan      html  css  js  c++  java
  • 初学shell,为了练习sed,写了个简单的批量修改文件名的脚本,后来执行时发现系统竟然自带有一个rename命令,顺便也记下了

      1 #!/bin/bash
      2 <<Comment
      3 批量修改文件名的脚本
      4 2015/10/24
      5 webber
      6 Comment
      7 ARGS=2
      8 ONE=1
      9 if [ $# -ne "$ARGS" ];then
     10   echo "传参错误!!"
     11   exit 2
     12 fi
     13
     14 num=0
     15
     16 for file in *$1*
     17 do
     18   if [ -f "$file" ];then
     19     fname=`basename "$file"`  #或者fname='echo "$file"'  包含$1的字符串的整个文件名赋值给fname 此处要用命令替换符``
     20     newname=`echo $fname | sed -e "s/$1/$2/g"`  #把新的文件名替换给旧的文件名的$1部分
     21     mv "$fname" "$newname"
     22     let num++
     23   fi
     24 done 2> error.txt #把标准错误输出到error.txt中
     25
     26 if [ -s error.txt ];then    #如果error.txt文件存在且不为空 那么提前结束退出
     27   echo "有错误发生,请检查error.txt文件"
     28   exit 3
     29 fi
     30
     31 if [ "$num" -eq "$ONE" ];then
     32   echo "$num file has been renamed"
     33 else
     34   echo "$num files have been renamed"
     35 fi
     36
     37 rm error.txt &> /dev/null  #文件名被成功修改后,要把错误文件信息删除

     38 exit 0

         汗~~~由于最近才开始学,``的用法还不熟悉,导致当时往 mv 里面传参的时候总数报错,说无法获取"basename "$file"" 的文件状态(stat): 没有那个文件或目录,然后把mv改成了echo试试,发现参数根本就没传递过来,这才发现要用``来进行命令转换,这与$()的作用是一样的,都是把其中的执行结果赋值给另一个变量,我在网上看有人说根据POSIX规范,推荐多用$()的形式,那以后就多用这种形式吧。

         后来在执行的时候,发现系统竟然自带rename这个命令,于是man了一下,发现差不多,给的例子是:

                  假如目录下现有如下文件:

                  foo1,....... foo9,,,.foo10, ..., foo278
    参考命令:
                  rename foo foo0 foo?
                  rename foo foo0 foo??

       你将会修改成如下文件名:

                   foo001, ..., foo009, foo010, ..., foo278.

    百度了一下别人的,命令格式大概这样:

            第一个参数:被替换掉的字符串

            第二个参数:替换成的字符串

            第三个参数:匹配要替换的文件模式

    而且,介绍了 rename .htm .html *.htm  这一命令 ,应该是rename还可以修复你的html文件的扩展名。

          以上有任何问题希望各位前辈指正。


  • 相关阅读:
    CRM
    eclipse 全局替换
    ps 泡泡
    SSH重新登录的问题
    又说oracle spatial 将Geometry转为gml
    其实你可以这样折腾java enum
    Sqlite 多线程入库
    Oracle spatial 将Geometry转换为gml字符串
    Oracle 关于WKT构造SDO_GEOMETRY的问题。
    Lucene之拉框查询
  • 原文地址:https://www.cnblogs.com/webber1992/p/5850774.html
Copyright © 2011-2022 走看看