初学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 ...
随机推荐
- 转载——Java与WCF交互(一):Java客户端调用WCF服务
最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...
- Android判断是否为刘海屏
主要总结主流品牌小米.华为.oppo.vivo的刘海屏判断.在某些特殊页面需要适配刘海屏时,可以用以下方法判断.或者判断屏幕比例是否大于2. /** * 小米刘海屏判断. */ public stat ...
- Ruby on rails初体验(一)
接触ruby on rails 已经有一段时间了,想记录一下自己的rails历程.自己写一些小例子来帮助学习. Rails 适用于那些以数据为中心的应用,很多应用的核心部分包括一个数据库,这些引用的 ...
- 使用PreloadJS加载图片资源
一. 使用createjs里的LoadQueue函数实现异步加载图片,监听加载进度 1.实例对象LoadQueue加载队列对象 var queue = new createjs.LoadQueue(f ...
- Docker 限制容器资源
默认情况下,容器没有资源的限制,它可以使用整个主机的所有资源.Dcoker提供了控制资源的方法, 多少内存,CPU,IO,都可以在docker run使用标志符来设置. 内存 Docker可以 ...
- PCA原理
http://blog.csdn.net/shizhixin/article/details/51181379
- 收藏以下linux查看系统信息的命令
# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# hostname ...
- eletron 播放rtmp flash 播放器问题
1 安装 flash https://www.flash.cn/ 2 man.js 配置 参考 https://newsn.net/say/electron-flash-win.html 3 播放器 ...
- poj1691--Painting A Board(拓扑+dfs)
题目链接:点击打开链接 题目大意:一个矩形由n个小矩形组成,如今要给小矩形染色,可是颜料会向下滑,为了防止弄乱颜料,所以要先染上面的矩形,后然染以下的矩形.每一次改变颜色都要用一个新的刷子.问最小用多 ...
- UNP学习笔记(第二章:传输层)
本章的焦点是传输层,包括TCP.UDP和SCTP. 绝大多数客户/服务器网络应用使用TCP或UDP.SCTP是一个较新的协议. UDP是一个简单的.不可靠的数据报协议.而TCP是一个复杂.可靠的字节流 ...