1. 程式人生 > >用一個例項講解rename命令中正則表示式的使用

用一個例項講解rename命令中正則表示式的使用

rename命令用字串替換的方式批量改變檔名。今天以一個例子來具體寫一下自己遇到的問題並且解決的例子。希望對大家有幫助。

格式如下:

rename 原字串  目標字串  檔案(列表)
  1. 原字串:將檔名需要替換的字串;
  2. 目標字串:將檔名中含有的原字元替換成目標字串;
  3. 檔案:指定要改變檔名的檔案列表。
舉例: 將main1.c重新命名為main.c
rename  main1.c  main.c  main1.c
rename支援萬用字元
?  可替代單個字元
*  可替代多個字元
[charset]  可替代charset集中的任意單個字元

舉例:

資料夾中有這些檔案foo1, ..., foo9, foo10, ..., foo278

rename foo foo0 foo?

該命令會把foo1到foo9的檔案重新命名為foo01到foo09,重新命名的檔案只是有4個字元長度名稱的檔案,檔名中的foo被替換為foo0。

rename支援正則表示式

現在以一個具體的例子講解該命令中正則表示式的使用:

今天下午我手中的資料(圖片)命名是(1).jpg、(2).jpg......到(16720).jpg。

現在我想要把檔名改為00001.png、00002.png、.......16720.png

第一步:將字尾名.jpg改成.png

rename 's/\.jpg$/\.png/' *.jpg

第二步:講左括號"("去掉:

rename 's/^\(//' *.png

第三步,將右括號“)”去掉:

rename 's/\)//' *.png

第四步:將檔名字改成五位數,不足五位數的前面補0即可。建立指令碼a.sh完成,指令碼內容如下:

#!/bin/bash
for i in {1..9}
do 
   mv $i.png  0000$i.png
done
for i in {10..99}
do 
   mv $i.png  000$i.png
done
for i in {100..999}
do 
   mv $i.png  00$i.png
done
for i in {1000..9999}
do 
   mv $i.png  0$i.png
done

然後將該指令碼檔案和需要更改檔名的資料夾下,我們直接執行該指令碼即可。

如果此時看到“許可權不夠”那就加上執行許可權即可。

chmod  755 a.sh