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)

僅表明我的見解,若是有異議的,請留言交流。勿噴~ 謝謝!

相關文章
相關標籤/搜索