初学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 ...
随机推荐
- linux文本处理常用命令
linux文本处理常用命令 linux文本处理命令:grep.sed.printf.awk 1.grep grep的作用是按行查找字符,输出包含字符的行. #从文件查询 grep 'hello' ...
- centos7安装hadoop2.6.1,详细教程
1.我搭建的是三台centos7的环境 首先准备三个centos7(文中出现的所有的链接都是我自己的) centos7下载地址(也可以上官网自行下载):https://pan.baidu.com/s/ ...
- Java Servlet Filter
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- Linux下设置开机启动
新配置了vsftpd 需要设置ftp开机启动,linux新手,还不是很熟悉linux下的操作! 查询后发现命令是: chkconfig vsftpd on chkconfig命令用于设置运行级别 ...
- ASIHTTPRequest实现断点续传
http://blog.csdn.net/daiyelang/article/category/1377418 ASIHTTPRequest可以实现断点续传.网上有一些介绍类似使用: [reque ...
- Android 进度条对话框ProgressDialog
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- python tcp,udp简单使用
import socket host = '127.0.0.1' port = 9999 #创建一个tcp socket套接字 tcp_server = socket.socket(socket.AF ...
- BF3 里面的z cull reverse reload
Bf3 siggraph2011的 分享 http://advances.realtimerendering.com/s2011/White,%20BarreBrisebois-%20Renderin ...
- 2016.11.29 activiti实战--第19章--统一身份管理(含自定义用户与数组的实现)
学习资料:<Activiti实战> 第十九章 统一身份管理 本章讲解如何统一业务系统与activiti的用户管理系统. 第5章的时候已经讲解过activiti的用户与组.一般来说业务系统都 ...
- 2016.6.20 eclipse中的jsp文件的字体大小在哪里修改
刚打开eclipse的时候,觉得jsp文件的字体太小了.于是去修改字体,但是colors and fonts里的字体选项太多了,不知道哪一个是. 试了几个后发现,是structured text ed ...