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文件的扩展名。

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

初学shell,为了练习sed,写了个简单的批量修改文件名的脚本,后来执行时发现系统竟然自带有一个rename命令,顺便也记下了的更多相关文章

  1. shell脚本:批量修改文件名

    参考链接1:shell脚本:批量修改文件名(删除文件名中字符) 参考链接2:linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 ) 参考链接3:每天一个linux ...

  2. Linux之shell命令实现-批量去掉文件名中空格,以及批量修改文件名为数字序号文件名

    1 shell下批量出去文件名中的空格 执行看现象: 上面的是执行for循环以后看到的: 然而源目录下的文件如下: 这样的话想要cat某个具体文件是拿不到的,所以需要去空格处理: 处理方式有很多:如 ...

  3. [转载][记录]shell 批量修改文件名

    参考了:[新手入门] shell脚本批量修改文件名 4楼回复 我刚好是在vagrant+ubuntu中进行开发,windows手动修改太麻烦. #!/bin/ksh ls *.htm | while ...

  4. linux批量修改文件名的shell脚本

    linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令  ========================  NAME ...

  5. 【Linux】Shell批量修改文件名

    修改文件名,替换中间字符: 例如:ABC_define_EFG.jpg,要把中间的define替换成argument: 用如下脚本即可: for var in *; do mv "$var& ...

  6. 用Objective-C写了一个简单的批量更改文件名的程序

    前言:因为本人要高仿一个app,从app中解压asserts得到的所有图片文件,文件名都带有~iPhone这个干扰的名字,为了去除这个~iPhone这个字符串,所以本人写了个简答的批量更改所有文件名的 ...

  7. 将window的shell脚本通过ftp传输到Linux服务器后, shell脚本中执行时提示“没有那个文件或目录”的解决办法

    出现bad interpreter:No such file or directory的原因,是文件格式的问题.这个文件是在Windows下编写的.换行的方式与Unix不一样,但是在vim下面如果不S ...

  8. shell脚本:批量修改文件名(添加/删除文件名中字符)

    添加字符 举例如下:批量创建10个随机字符串的文件,要求每个文件名后面添加_aaa,后缀名不变: [root@localhost goodboy]# ls adddbbdedf.html  baacj ...

  9. Linux利用sed批量修改文件名

    初始文件名 # ls -lh total 5.5G -rw-r--r-- 1 root root 193K Sep 28 09:38 20180908.txt drwxr-xr-x 2 root ro ...

随机推荐

  1. springBoot 打成jar包

    1.一种方式通过cmd 窗口进行打包 配置maven 环境变量 进入到项目中  运行 mvn clean 然后运行mvn package 进行打包 2.通过idea 进行打包 (1)pom 中安装打包 ...

  2. 牛客网 Wannafly挑战赛8 B.LBJX的三角形

    B-LBJX的三角形 链接:https://www.nowcoder.com/acm/contest/57/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K, ...

  3. Codeforces Gym10081 A.Arcade Game-康托展开、全排列、组合数变成递推的思想

    最近做到好多概率,组合数,全排列的题目,本咸鱼不会啊,我概率论都挂科了... 这个题学到了一个康托展开,有点用,瞎写一下... 康托展开: 适用对象:没有重复元素的全排列. 把一个整数X展开成如下形式 ...

  4. 转:IAdaptable & IAdapterFactory

    IAdaptable & IAdapterFactory在Eclipse中使用IAdaptable接口的方式有两种 在Eclipse中使用IAdaptable接口的方式有两种1:某个类希望提供 ...

  5. Delphi 异或校验方法

    //数据异或校验function BytesXor(buffer:array of byte):Integer;var i:integer;begin Result:=$0; for i:=Low(b ...

  6. iOS -- iOS11新特性,如何适配iOS11

    前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...

  7. SilverLight-Access:银光项目测试数据类列表

    ylbtech-SilverLight-Access:银光项目测试数据类列表 1.A, Product.cs 产品类 1.A, Product.cs 产品类返回顶部 1,/Access/Product ...

  8. JAVA Eclipse开发Android如何让超出界面的部分自动显示滚动条

    在原有布局的最外围添加一层ScrollView,注意原有布局的声明也要删了 <ScrollView xmlns:android="http://schemas.android.com/ ...

  9. win10 只要打开文件对话框就卡死解决方法

    我电脑的问题是:win10系统,只要打开 文件对话框就卡死,假死,cpu100% 一直没有解决,但是只要把缩略图关了,就ok. 但是又想要留着缩略图,还是得显示,于是乎一直在找解决办法. 此方法好像可 ...

  10. 网络编程-UDP-TCP

    网络编程-UDP-TCP) UDP 特点:(面向无连接)(聊天) 1.将数据及源和目的封装成数据包中,不须要建立连接.(封包.无连接) 2.每一个数据包的限制大小在64k内.(小数据) 3.因无连接. ...