之前有位网友问过,批量修改文件名的方法。然后我当时也是不知道,后来搜索了些许资料我明白了,批量修改文件名可以有很多种方法!在这里向大家推荐我的老师的一篇博文,批量修改文件名。
linux下批量修改文件名精彩解答案例分享 - 老男孩linux运维 - 51CTO技术博客
http://oldboy.blog.51cto.com/2561410/711342
有些网友反馈,那篇博文里老师似乎答的不是很对题。在这里我想说的是,老师只不过是引路人,把你点到为止。不要就只想着老师把标准的答案给你说出来。说出来了,你干嘛呢?是不是,给你说了方法,剩下的自己搞定!
好了废话不多说,只是给网友解决类似的问题。希望能帮到更多的人。
问题是这样的。在一个目录下有很多的文件,而且都很相似。
老套路,先批量创建那些规格差不多的文件名。【测试的第一步】
[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进行修改
[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
注意,如果想要替换掉下划线,那么你不能加任何引号。
下面是我又创建了许多测试文件来测试的。
[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)
仅代表个人看法,如果有异议的,请留言交流。勿喷~ 谢谢!