初学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文件的扩展名。
以上有任何问题希望各位前辈指正。
初学shell,为了练习sed,写了个简单的批量修改文件名的脚本,后来执行时发现系统竟然自带有一个rename命令,顺便也记下了的更多相关文章
- shell脚本:批量修改文件名
参考链接1:shell脚本:批量修改文件名(删除文件名中字符) 参考链接2:linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 ) 参考链接3:每天一个linux ...
- Linux之shell命令实现-批量去掉文件名中空格,以及批量修改文件名为数字序号文件名
1 shell下批量出去文件名中的空格 执行看现象: 上面的是执行for循环以后看到的: 然而源目录下的文件如下: 这样的话想要cat某个具体文件是拿不到的,所以需要去空格处理: 处理方式有很多:如 ...
- [转载][记录]shell 批量修改文件名
参考了:[新手入门] shell脚本批量修改文件名 4楼回复 我刚好是在vagrant+ubuntu中进行开发,windows手动修改太麻烦. #!/bin/ksh ls *.htm | while ...
- linux批量修改文件名的shell脚本
linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令 ======================== NAME ...
- 【Linux】Shell批量修改文件名
修改文件名,替换中间字符: 例如:ABC_define_EFG.jpg,要把中间的define替换成argument: 用如下脚本即可: for var in *; do mv "$var& ...
- 用Objective-C写了一个简单的批量更改文件名的程序
前言:因为本人要高仿一个app,从app中解压asserts得到的所有图片文件,文件名都带有~iPhone这个干扰的名字,为了去除这个~iPhone这个字符串,所以本人写了个简答的批量更改所有文件名的 ...
- 将window的shell脚本通过ftp传输到Linux服务器后, shell脚本中执行时提示“没有那个文件或目录”的解决办法
出现bad interpreter:No such file or directory的原因,是文件格式的问题.这个文件是在Windows下编写的.换行的方式与Unix不一样,但是在vim下面如果不S ...
- shell脚本:批量修改文件名(添加/删除文件名中字符)
添加字符 举例如下:批量创建10个随机字符串的文件,要求每个文件名后面添加_aaa,后缀名不变: [root@localhost goodboy]# ls adddbbdedf.html baacj ...
- 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 ...
随机推荐
- springBoot 打成jar包
1.一种方式通过cmd 窗口进行打包 配置maven 环境变量 进入到项目中 运行 mvn clean 然后运行mvn package 进行打包 2.通过idea 进行打包 (1)pom 中安装打包 ...
- 牛客网 Wannafly挑战赛8 B.LBJX的三角形
B-LBJX的三角形 链接:https://www.nowcoder.com/acm/contest/57/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K, ...
- Codeforces Gym10081 A.Arcade Game-康托展开、全排列、组合数变成递推的思想
最近做到好多概率,组合数,全排列的题目,本咸鱼不会啊,我概率论都挂科了... 这个题学到了一个康托展开,有点用,瞎写一下... 康托展开: 适用对象:没有重复元素的全排列. 把一个整数X展开成如下形式 ...
- 转:IAdaptable & IAdapterFactory
IAdaptable & IAdapterFactory在Eclipse中使用IAdaptable接口的方式有两种 在Eclipse中使用IAdaptable接口的方式有两种1:某个类希望提供 ...
- Delphi 异或校验方法
//数据异或校验function BytesXor(buffer:array of byte):Integer;var i:integer;begin Result:=$0; for i:=Low(b ...
- iOS -- iOS11新特性,如何适配iOS11
前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...
- SilverLight-Access:银光项目测试数据类列表
ylbtech-SilverLight-Access:银光项目测试数据类列表 1.A, Product.cs 产品类 1.A, Product.cs 产品类返回顶部 1,/Access/Product ...
- JAVA Eclipse开发Android如何让超出界面的部分自动显示滚动条
在原有布局的最外围添加一层ScrollView,注意原有布局的声明也要删了 <ScrollView xmlns:android="http://schemas.android.com/ ...
- win10 只要打开文件对话框就卡死解决方法
我电脑的问题是:win10系统,只要打开 文件对话框就卡死,假死,cpu100% 一直没有解决,但是只要把缩略图关了,就ok. 但是又想要留着缩略图,还是得显示,于是乎一直在找解决办法. 此方法好像可 ...
- 网络编程-UDP-TCP
网络编程-UDP-TCP) UDP 特点:(面向无连接)(聊天) 1.将数据及源和目的封装成数据包中,不须要建立连接.(封包.无连接) 2.每一个数据包的限制大小在64k内.(小数据) 3.因无连接. ...