添加字符

举例如下:批量创建10个随机字符串的文件,要求每个文件名后面添加_aaa,后缀名不变;

[root@localhost goodboy]# ls

adddbbdedf.html  baacjaiija.html  bhcfaabcfh.html  dgjdcdfbca.html  efejadfdji.html

agdhcdeaje.html  bgffbffjcg.html  cbbiebdafh.html  diadebbhag.html  jcajafgejf.html

脚本1:

[root@localhost ~]# cat 02.sh
#!/bin/bash
path=/goodboy
[ -d $path ] && cd $path
for file in `ls`
do
mv $file `echo $file|sed 's/\(.*\)\.\(.*\)/\1_aaa.\2/g'`
done

解释说明:

使用sed替换,正则表达式第1个()括号里面代表文件名即\1;中间. 使用\进行脱意,代表分隔符;

第2个括号里面代表后缀html内容即\2;

使用此方法需要在替换中添加.符号;

更改后的效果如下:

[root@localhost goodboy]# ll
-rw-r--r-- 1 root root 0 2月 17 17:40 adddbbdedf_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 agdhcdeaje_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 baacjaiija_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 bgffbffjcg_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 bhcfaabcfh_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 cbbiebdafh_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 dgjdcdfbca_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 diadebbhag_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 efejadfdji_aaa.html
-rw-r--r-- 1 root root 0 2月 17 17:40 jcajafgejf_aaa.html

  

脚本2:

#!/bin/bash
path=/goodboy
[ -d $path ] && cd $path
for file in `ls`
do
mv $file `echo $file|sed 's/\(.*\)\(\..*\)/\1_aaa\2/g'`
done

解释说明:

同样使用sed替换,正则表达式,与上面的区别在于第2个括号里面的内容,代表.html 分隔符和后缀名为一体,替换内容的话不需要再单独加.点;.分隔符同样需要使用\进行脱意;

可以使用sed -r参数,看起来就清爽很多,不需要\脱意;

mv $file `echo $file|sed -r 's/(.*)(\..*)/\1_aaa\2/g'`

删除字符

举例如下:批量改名,删除文件名中多余字符

目录下文件名为如下,要求去掉_finished。

stu_102999_1_finished.jpg

stu_102999_2_finished.jpg

stu_102999_3_finished.jpg

stu_102999_4_finished.jpg

stu_102999_5_finished.jpg

可以实现的方法有很多种:

方法一:for循环结合sed替换

[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file `echo $file|sed 's/_finished//g'`;done;

  

方法二:ls结合awk,输出交给bash执行

[baby@localhost ~]$ ls *.jpg |awk -F "_finished" '{print "mv "$0" "$1$2""}'|bash

  

实际执行的命令如下,以_finished作为分隔符,mv及变量 需要加双引号

[baby@localhost ~]$ ls *.jpg |awk -F "_finished" '{print "mv "$0" "$1$2""}'
mv stu_102999_1_finished.jpg stu_102999_1.jpg
mv stu_102999_2_finished.jpg stu_102999_2.jpg
mv stu_102999_3_finished.jpg stu_102999_3.jpg
mv stu_102999_4_finished.jpg stu_102999_4.jpg
mv stu_102999_5_finished.jpg stu_102999_5.jpg

  

方法三:rename改名(rename 需要安装)

[baby@localhost ~]$ rename "_finished" "" *.jpg

方法四:for循环加变量部分截取

[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file `echo ${file%_finished*}.jpg`;done;

  

不使用echo也可以实现

[baby@localhost ~]$ for file in `ls *.jpg`;do mv $file ${file%_finished*}.jpg;done;

  

更改后结果如下:

stu_102999_1.jpg
stu_102999_2.jpg
stu_102999_3.jpg
stu_102999_4.jpg
stu_102999_5.jpg

shell脚本:批量修改文件名(添加/删除文件名中字符)的更多相关文章

  1. 用shell脚本批量修改文件后缀名

    早上本想将一些照片上传到相册中,但是由于所有照片的扩展名都是JPG而不是小写的jpg,因此造成了“格式不正确”而不能上传照片.此刻就产生了这样一个问题:使用shell脚本如何批量将所有文件的扩展名JP ...

  2. Shell脚本批量修改图片尺寸

    #!/bin/sh function scandir(){ local cur_dir parent_dir workdir workdir=$ cd ${workdir} if [ ${workdi ...

  3. shell 脚本 批量修改文件名

    修改文件名前 #!/bin/bask # for a in $( ls /etc/yum.repos.d/CentOS* );do if [ $a != '/etc/yum.repos.d/CentO ...

  4. linux shell脚本批量修改密码,无需交互输入

    转至:https://blog.csdn.net/weixin_34409357/article/details/89833777?utm_medium=distribute.pc_relevant. ...

  5. shell脚本批量ssh登陆主机并执行命令

    shell脚本批量ssh登陆主机并执行命令 今天在客户现场遇到了这个问题,客户没有管理工具,无法批量登陆主机下发命令,几个个C段啊,让我一个一个登陆,.................. 所以写了个s ...

  6. Linux shell脚本 批量创建多个用户

    Linux shell脚本 批量创建多个用户 #!/bin/bash groupadd charlesgroup for username in charles1 charles2 charles3 ...

  7. Shell 脚本批量创建数据库表

    使用 Shell 脚本批量创建数据表 系统:Centos6.5 64位 MySQL版本:5.1.73 比如下面这个脚本: #!/bin/bash #批量新建数据表 for y in {0..199}; ...

  8. shell脚本,当用sed删除某一文件里面的内容时,并追加到同一个文件会出现问题。

    shell脚本,当用sed删除某一文件里面的内容时,并追加到同一个文件会出现问题.因为初始文件和写入文件是一个文件这是失败的.需要追加到另一个文件,然后再用mv进行操作.[root@localhost ...

  9. shell脚本批量执行命令----必需判断上一步执行结果--没有捷径

    # 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...

随机推荐

  1. Jmeter 局域网的IP欺骗终极解决方案

    ip欺骗是什么?    ip欺骗就是模拟ip.什么意思呢,一个电脑就只有一个ip地址,当然如果有多块网卡的话,会有多个ip地址,一般服务器上有个网卡,咱们自己的电脑一般都只有一个ip地址,但是你做压测 ...

  2. jmeter从表格批量读取数据(一)

    1.新建一个文本文档,重命名为2.csv 2.可以在文档中设置如下参数:casenum:用例编号:url:访问路径:para:访问的域名:function:请求方式:expectValue:响应值 3 ...

  3. 随笔分类 - C++托管(clr)(转)

    c#利用SWIG调用c++dll学习总结[转] 摘要: 开发环境: 操作系统:windows 7 IDE:Microsoft Visual Studio Professional 2015 SWIG: ...

  4. 201671030106 何启芝 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十四 团队项目评审&课程学习总结 课程学习目 ...

  5. loj10017. 「一本通 1.2 练习 4」传送带(三分套三分)

    题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...

  6. day006-python函数

    一.定义函数 def 函数名(): 函数体代码 例: #定义函数 def email(): print('send email') #调用执行函数 email() 二.函数的返回值 def email ...

  7. OpenCV 学习笔记(7)vs2015+ffmpeg开发环境配置

    参考教程 https://blog.csdn.net/HUSTLX/article/details/51014307 1.在http://ffmpeg.zeranoe.com/builds/  下载最 ...

  8. 用nginx代理请求,django后台静态文件找不到的问题

    使用谷歌开发者工具,查看静态文件的地址,把相应的地址配置到nginx中 默认的django后台静态文件的路径是 /usr/local/lib/python3.6/site-packages/djang ...

  9. 关于api创建监控项,添加灵活调度的事件间隔

    在api文档中没有明确说明,可以查询数据库,得到的是一个字符串,

  10. python爬虫出现ProxyError: HTTPSConnectionPool错误

    在今天刚刚打开pycharm运行爬虫时,发现所有的爬虫都不能运行,会出现如下的错误: 错误出现的主要原因是;代理错误(其实自己根本没有设置代理) 解决方法: 在网上查阅了许多类似的错误解决方法,试过后 ...