以前有位网友问过,批量修改文件名的方法。而后我当时也是不知道,后来搜索了些许资料我明白了,批量修改文件名能够有不少种方法!在这里向你们推荐个人老师的一篇博文,批量修改文件名。linux
linux下批量修改文件名精彩解答案例分享 - 老男孩linux运维 - 51CTO技术博客bash
http://oldboy.blog.51cto.com/2561410/711342运维
有些网友反馈,那篇博文里老师彷佛答的不是很对题。在这里我想说的是,老师只不过是引路人,把你点到为止。不要就只想着老师把标准的答案给你说出来。说出来了,你干吗呢?是否是,给你说了方法,剩下的本身搞定!
ide
好了废话很少说,只是给网友解决相似的问题。但愿能帮到更多的人。linux运维
问题是这样的。在一个目录下有不少的文件,并且都很类似。测试
老套路,先批量建立那些规格差很少的文件名。【测试的第一步】url
[root@Jason64-17 net]# for i in `seq -w 10` > do touch stu\_$i\_linux.jpg > done [root@Jason64-17 net]# sl total 0 -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_01_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_02_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_03_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_04_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_05_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_06_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_07_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_08_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_09_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_10_linux.jpg
而后使用rename进行修改spa
[root@Jason64-17 net]# rename \_linux '' *.jpg [root@Jason64-17 net]# sl total 0 -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_01.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_02.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_03.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_04.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_05.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_06.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_07.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_08.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_09.jpg -rw-r--r-- 1 root root 0 Oct 9 21:22 stu_10.jpg
注意,若是想要替换掉下划线,那么你不能加任何引号。blog
下面是我又建立了许多测试文件来测试的。get
[root@Jason64-17 net]# for i in `seq -w 10`; do touch stu\_$i\_linux.jpg; done [root@Jason64-17 net]# sl total 0 -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_01_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_02_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_03_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_04_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_05_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_06_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_07_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_08_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_09_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:58 stu_10_linux.jpg [root@Jason64-17 net]# rename '\_linux' '' *.jpg [root@Jason64-17 net]# sl total 0 -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_01_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_02_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_03_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_04_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_05_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_06_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_07_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_08_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_09_linux.jpg -rw-r--r-- 1 root root 0 Oct 9 21:27 stu_10_linux.jpg
为何呢?搜索了相关的资料后,我发现了,rename版本若是是perl版本的,那rename命令是支持正则的;所以在perl版本的rename下,执行上述命令就能够成功,若是你的rename版本是c版本的,那么上述命令是不成功的。这个是版本支持的问题,因此没必要深究。
若是想了解的朋友能够戳
http://baike.baidu.com/link?url=ZMVvH0efX-5Z5GR-JAYHOGTWailxrPlo0fNg-Tdt3Xo23y8Apf6MALlWAHa-P55V
既然如此的话,那么在老师博客里面提到的那位网友,可能就是由于他的rename版本不支持致使的。so,这里重点说的就是rename,虽然这个命令不是很重要。可是它其实仍是颇有用的,不是吗?
固然,有人会说,你这个都是在一个目录下,那我要是在不一样的目录下呢?
聪明的朋友会说,用两个命令。一个find先把要修改的文件找出来,再接一个管道,一个rename不就完了吗?
是的,上述办法能够说是一种思路,其实有不少种思路。老师的那篇博文里面讲的已经很详细了,你们只须要到那里面学一种就ok了。其余的做为了解也何尝不可。
下面我附加一点内容,
查看rename版本的信息
[root@Jason64-17 net]# man rename | head -1 RENAME(1) Linux Programmer’s Manual RENAME(1)
仅表明我的见解,若是有异议的,请留言交流。勿喷~ 谢谢!