ubuntu系統rename命令批量檔案重新命名

2021-08-11 12:49:23 字數 3177 閱讀 6548

首先,熟悉正規表示式的概念,進而可以更好理解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...