linux下的rename是有兩個版本的,一個是C語言版本,一個是Perl語言版本,如何判斷當前是哪個版本:
輸入
man rename
看到第一行是:
RENAME(1) Linux Programmer’s Manual RENAME(1)
這個就是C語言版本的,而如果出現:
RENAME(1) Perl Programmers Reference Guide RENAME(1)
則是Perl版本的了
C語言版本格式:rename 原字符串 新字符串 文件名
example:當前目錄下存在兩個文件:a_01、a_02,若需要將文件名中的a替換為b,其他部分保持不變則應當鍵入
rename a b a_*
代碼中最后一個參數代表以a_開頭的所有文件
之前一直用這種方法做實驗一直不成功,所以上網查詢了下,再回去查看了下實驗平臺所使用的是Perl語言的版本,然后才恍然大悟。下面介紹Perl語言版本的用法。
Perl語言版本格式:rename 's/原字符串/新字符串/' 文件名
example:仍然是剛剛那兩個文件:a_01、a_02,若需要將文件名中的a替換為b,其他部分保持不變則應當鍵入
rename 's/a/b/' a_*
Perl版本還有另外一種用法,通過rename 'y/a-z/A-Z/' 文件名來翻轉文件名的大小寫。
example:比如剛剛那兩個文件:a_01、a_02,若需要將文件名中的a翻轉為A,則應當鍵入
rename 'y/a-z/A-Z/' a_*
當然不管是哪種方法都支持使用通配符以及正則表達式匹配,例如現在有5個文件file_1,file_2,file_3,file_4,file_5
將五個文件名中的file改成hello:
rename 's/f.*e/hello/' file_?
其中.是正則表達式中匹配除換行符以外的任意字符,*表示重復0次到多次,f.*e就代表以f開頭e結尾的字符串(中間不管多少個字符),?是通配符表示可代替單個字符, 值得一提的是*在通配符中表示可代替多個字符
關于更多正則表達式的用法請參考正則表達式