標籤:
剛學linux時,對檔案重新命名腦袋裡立馬呈現了rename命令,但卻用不起來。G了一下,仍是一知半解,而且發現很多人對它也是很陌生!還有部分童鞋說直接使用mv,哎,mv還真管用,但老感覺命令名咋就那麼不順眼呢!
我們來man下吧,先man mv:
mv - move (rename) files
mv不僅有轉移的功能,確實有重新命名的含義,文法簡單可理解為:
mv [path/]oldfilename [path/]newfilename
但只能是重名為當個檔案。
我們再來man rename:
rename - renames multiple files
可以看出rename命令是專用於檔案重新命名的,而且是對批量檔案重新命名。
Linux的 rename版本
Linux的 rename 命令有兩個版本,一個是C語言版本的,一個是Perl語言版本的,早期的Linux發行版基本上使用的是C語言版本的,現在已經很難見到C語言版本的了, 由於曆史原因,在Perl語言大紅大紫的時候,Linux的工具開發人員們信仰Perl能取代C,所以大部分工具原來是C版本的都被Perl改寫了,因為 Perl版本的支援正則處理,所以功能更加強大,已經不再需要C語言版本的了。
如何區分系統裡的rename命令是哪個版本的?
輸入 man rename 看到第一行是
RENAME(1) Linux Programmer’s Manual RENAME(1)
那麼 這個就是C語言版本的。而如果出現的是:
RENAME(1) Perl Programmers Reference Guide RENAME(1)
這個就是Perl版本的了!
兩個版本的文法差異
- C語言的,按照man上面的註解,rename的文法格式是:
rename fromtofile
d這個命令有三個參數,分別是 from : 修改什麼名字, to:改成什麼名字, file 需要修改的檔案是哪些。
用法樣本:比如,有一批檔案,都是以 log開頭的, log001.txt, log002.txt ....... 一直到 log100.txt,現在想要把這批檔案的log全部替換為 history
rename log history log*
這句命令的意思很明白了,把 以 log開頭的所有檔案中的 log字元替換為 history,這樣替換後的檔案是: history001.txt, history002.txt ..... 一直到 history100.txt。
- Perl 版本的批量重新命名,帶有Perl的好處是,你可以使用Regex來完成很奇特的功能。perl 版本的參數格式:
rename perlexpr files
man rename的協助樣本:有一批檔案,以 .bak結尾,現在想把這些 .bak 統統去掉:
rename ‘s/\.bak$//‘ *.bak
這個命令很簡單,因為我還沒有系統學習過perl,我不知道perl裡替換字串是不是這麼乾的,但sed是這麼乾的,所以如果你有sed或者tr基礎,很容易明白,這個替換和sed裡的正則文法是一模一樣的。
總結:所以如果你只是重名一個檔案,那麼還是mv方便快捷!
Linux 重新命名命令 rename 和 mv 詳解