linux 批量修改

来源:互联网 发布:excel数据加双引号 编辑:程序博客网 时间:2024/06/06 07:52
<img src="http://img.blog.csdn.net/20140831110709879?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1cWlhbmcyMTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />##########################################################linux下批量修改文件名精彩解答案例分享#date:21:34 2011-11-10#作者:老男孩 创办了《老男孩linux实战培训》为广大linux爱好者提供服务。#QQ:31333741 MAIL:oldboy521@hotmail.com#QQ交流群:45039636    #blog: http://oldboy.blog.51cto.com#psite: <a target=_blank href="http://oldboy.cc">http://oldboy.cc</a>(即将开放)#pblog:http://etiantian.org##########################################################问题:见一兄弟的需求,下面我截的图。
<img src="http://img.blog.csdn.net/20140831110216375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1cWlhbmcyMTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />特别说明下,有的兄弟很细心,上面截图中说的是去掉_finished我的解答是针对去掉finished的,不过不影响大局,特请大家注意下。解答:[准备测试数据]mkdir /oldboy cd /oldboy touch stu_102999_1_finished.jpg touch stu_102999_2_finished.jpg touch stu_102999_3_finished.jpg touch stu_102999_4_finished.jpg touch stu_102999_5_finished.jpg 方法1:shell脚本for循环结合sed实现[检查数据] [root@oldboy oldboy]# lltotal 4-rw-r--r-- 1 root root 85 Oct  2 12:54 oldboy_modi_file.sh-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_1_finished.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_2_finished.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_3_finished.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_4_finished.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_5_finished.jpg[开发脚本][root@oldboy oldboy]# cat oldboy_modi_file.sh #!/bin/shfor file in `ls ./*.jpg`  #shell脚本for循环,file为变量依次取得ls ./*.jpg的结果文件名domv $file `echo $file|sed 's/finished//g'` #使用mv命令进行更改文件,新的文件名字符串拼接是本题的重点。done#特别提示:通过本题,可以学习到for循环的使用,及mv、sed等命令的使用[执行脚本][root@oldboy oldboy]# sh oldboy_modi_file.sh [检查结果][root@oldboy oldboy]# lltotal 4-rw-r--r-- 1 root root 85 Oct  2 12:54 oldboy_modi_file.sh-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_1_.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_2_.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_3_.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_4_.jpg-rw-r--r-- 1 root root  0 Oct  2 12:50 stu_102999_5_.jpg方法二:shell脚本for循环加变量的部分截取方法[root@oldboy oldboy]#ls -ltotal 4-rw-r--r-- 1 root root 114 Nov 14 00:21 change_file_name.sh-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_1_finished.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_2_finished.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_3_finished.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_4_finished.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_5_finished.jpg[root@oldboy oldboy]#cat change_file_name.sh #!/bin/sh# oldboy QQ:31333741for file in `ls ./*.jpg`  do /bin/mv $file `echo "${file%finished*}.jpg"`  #这里就是变量的截取新方法,在老男孩的shell编程课程中会讲到此用法。done [root@oldboy oldboy]#sh change_file_name.sh [root@oldboy oldboy]#ls -ltotal 4-rw-r--r-- 1 root root 114 Nov 14 00:21 change_file_name.sh-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_1_.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_2_.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_3_.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_4_.jpg-rw-r--r-- 1 root root   0 Nov 14 00:23 stu_102999_5_.jpg特别提示:本脚本和文件在同一目录方法三:ls结合awk实现[root@oldboy oldboy]# lltotal 0-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_1_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_2_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_3_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_4_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_5_finished.jpg[root@oldboy oldboy]# ls |awk -F 'finished' '{print  $0}'stu_102999_1_finished.jpgstu_102999_2_finished.jpgstu_102999_3_finished.jpgstu_102999_4_finished.jpgstu_102999_5_finished.jpg[root@oldboy oldboy]# ls |awk -F 'finished' '{print  $1}'stu_102999_1_stu_102999_2_stu_102999_3_stu_102999_4_stu_102999_5_[root@oldboy oldboy]# ls |awk -F 'finished' '{print  $2}'.jpg.jpg.jpg.jpg.jpg[root@oldboy oldboy]# ls |awk -F 'finished' '{print  $1$2}'stu_102999_1_.jpgstu_102999_2_.jpgstu_102999_3_.jpgstu_102999_4_.jpgstu_102999_5_.jpg[root@oldboy oldboy]# ls |awk -F 'finished' '{print "mv "$0" "$1$2" "}'|/bin/bash[root@oldboy oldboy]# lltotal 0-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_1_.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_2_.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_3_.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_4_.jpg-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_5_.jpg方法四:通过专业的改名命令rename实现[root@oldboy oldboy]# lltotal 0-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_1_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_2_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_3_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_4_finished.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_5_finished.jpg[root@oldboy oldboy]# rename "finished" ""  * ==>执行批量改名[root@oldboy oldboy]# lltotal 0-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_1_.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_2_.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_3_.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_4_.jpg-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_5_.jpg拓展下:改扩展名的方法[root@oldboy oldboy]# rename .jpg .oldboy *[root@oldboy oldboy]# lltotal 0-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_1_.oldboy-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_2_.oldboy-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_3_.oldboy-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_4_.oldboy-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_5_.oldboy特别提示:如果大家有需要解答问题可以,blog留言给我。我们互相交流,共同切磋,共同进步。兄弟们啊,这个问题并不重要,解答问题的思路才是最重要的。本文出自 “老男孩linux运维” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/711342

0 0
原创粉丝点击