首先,熟悉正規表示式的概念,進而可以更好理解rename命令操作. 正規表示式推薦鏈結
其次,記住最簡單例子("cd 目標資料夾"後):
命令列: rename -v 's/原字串/新字串/'*.mp4
功能:將原字串替換為新字串
最後,詳細介紹
一.格式
usage:rename [-v] [-n] [-f] perlexpr [filenames]
引數介紹:
-v(verbose)列印被成功重新命名的檔案
-n(no-act)只顯示將被重新命名的檔案,而非實際進行重新命名操作
-f(force)覆蓋已經存在的檔案
perlexprperl語言格式的正規表示式
files需要被替換的檔案(比如*.c、*.h),如果沒給出檔名,將從標準輸入讀
二.perlexpr 介紹
2.1 三種形式[2]
匹配:m// (可以省略m,直接寫成/regexp/)
替換:s///
轉化:tr///
rename命令常用到替換和轉化兩種(用匹配也沒意義)。轉換跟替換不同,替換是將replacement整個字串替換pattern字串,而轉換則是用replacement逐個字元替換pattern逐個字元,結果依賴於replacement與pattern字元個數(見下述分析)。
(1)替換
替換表達方式如下[3],還有一系列引數,貌似不怎麼用得著。
s/pattern/replacement/egimosx
eevaluate the right side as an expression.
gmatch globally, i.e. all occurrences.
icase-insensitive pattern matching.
mtreat string as multiple lines.
oonly compile pattern once, even if variables within it change.
streat string as single line.
xuse extended regular expressions
(2)轉化
轉化有兩種等價表達方式,如下:
tr/searchlist/replacementlist/cds
y/searchlist/replacementlist/cds
ccomplement the searchlist.
ddelete found but unreplaced characters.
ssquash duplicate replaced characters.
轉化同替換不同,用replacementlist逐個字元替換searchlist逐個字元,比如'tr/sam/stm/',用s替代s,t替代a,m替代m。結果依賴於兩者字元長短,下面以檔名fastspisam3c.nc為例進行說明:
jelline@jelline:~$ rename -n 'tr/sam3/stm/' fastspisam3c.nc /*替換字元短,用最後乙個字元m替換3*/
fastspisam3c.nc renamed as ftstspistmmc.nc
jelline@jelline:~$ rename -n 'tr/sam3/stm32/' fastspisam3c.nc /*替換字元長,多出字元被忽略*/
fastspisam3c.nc renamed as ftstspistm3c.nc
引數c、d、s把我搞懵了,本想通過一系列操作,總結規律,結果徒勞。
2.2 常用模式
正規表示式中的一些常用模式pattern[2]:
x? 匹配 0 次或一次 x 字串
x* 匹配 0 次或多次 x 字串,但匹配可能的最少次數
x+ 匹配 1 次或多次 x 字串,但匹配可能的最少次數
.* 匹配 0 次或一次的任何字元
.+ 匹配 1 次或多次的任何字元
匹配剛好是 m 個 的指定字串
匹配在 m個 以上 n個 以下 的指定字串
匹配 m個 以上 的指定字串
匹配符合 內的字元
[^] 匹配不符合 內的字元
[0-9]匹配所有數字字元
[a-z]匹配所有小寫字母字元
[^0-9]匹配所有非數字字元
[^a-z]匹配所有非小寫字母字元
^ 匹配字元開頭的字元
$ 匹配字元結尾的字元
\d 匹配乙個數字的字元,和 [0-9] 語法一樣
\d+ 匹配多個數字字串,和 [0-9]+ 語法一樣
\d 非數字,其他同 \d
\d+ 非數字,其他同 \d+
\w 英文本母或數字的字串,和 [a-za-z0-9] 語法一樣
\w+ 和 [a-za-z0-9]+ 語法一樣
\w 非英文本母或數字的字串,和 [^a-za-z0-9] 語法一樣
\w+ 和 [^a-za-z0-9]+ 語法一樣
\s 空格,和 [\n\t\r\f] 語法一樣
\s+ 和 [\n\t\r\f]+ 一樣
\s 非空格,和 [^\n\t\r\f] 語法一樣
\s+ 和 [^\n\t\r\f]+ 語法一樣
\b 匹配以英文本母,數字為邊界的字串
\b 匹配不以英文本母,數值為邊界的字串
a|b|c 匹配符合a字元 或是b字元 或是c字元 的字串
abc 匹配含有 abc 的字串
三、例項
3.1 將所有*.nc檔案中sam3替換成stm32
rename -v 's/sam3/stm32/' *.nc /*執行修改,並列出已重新命名的檔案*/
3.2 去掉檔案字尾名(比如去掉.bak)
rename 's/\.bak$//' *.bak
3.3 將檔名改為小寫
rename 'y/a-z/a-z/' *
3.4 去掉檔名的空格
rename 's/[ ]+//g' *
3.5 檔案開頭加入字串(比如jelline)
rename 's/^/jelline/' *
3.6 檔案末尾加入字串(比如jelline)
rename 's/$/jelline/' *
參考部落格
Ubuntu系統與Centos系統一些命令的區別
使用者管理 1.新增新使用者 在ubuntu下,root使用者預設是沒有密碼的,因此也就無法使用 想用root的話,得給root使用者設定乙個密碼,密碼安全性不做強制要求的。sudo passwd root ubuntu建使用者最好用adduser adduser和useradd是一樣的在別的lin...
Ubuntu10 10系統下3D特效預設命令
今天剛開始準備好好搗鼓一下ubuntu下的3d效果,正所謂工欲善其事,必先利其器,所以要先熟悉命令才對,上網找了一下,竟然沒有人寫關於ubuntu下的3d特效的預設命令的,所以有了自己寫乙份的打算,一點點兒對照著預設命令打出來的。也許有人會問了,這些命令都是可以修改的,你想用哪個直接自己設定按鍵不就...
Ubuntu下apt get與pip安裝命令的區別
在ubuntu伺服器下安裝包的時候,經常會用到sudo apt get install 包名 或 sudo pip install 包名,那麼兩者有什麼區別呢?1.區別 pip用來安裝來自pypi 的python所有的依賴包,並且可以選擇安裝任何在pypi上已上傳的先前版本的依賴包,個人認為是pyt...