rename用法之批量修改文件名,也算是答网友的一个问题吧~~~

以前有位网友问过,批量修改文件名的方法。而后我当时也是不知道,后来搜索了些许资料我明白了,批量修改文件名能够有不少种方法!在这里向你们推荐个人老师的一篇博文,批量修改文件名。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)

仅表明我的见解,若是有异议的,请留言交流。勿喷~ 谢谢!