Linux中如何批量截短檔名

宋哥發表於2017-01-24

iamlaosong文

工作中需要批量將一批檔名改短,改短部分為隨機按時間生成的,沒什麼規律,無法簡單的用rename命令修改,那個什麼正規表示式又不會寫,幸好在網上找到一種方法,成功的用指令碼實現了檔名截短。

原檔名如下:

20170101_340000_1_HK_BCF_201701122132_2060.txt
20170101_340000_1_LY_BCF_201701122132_2059.txt
20170101_340000_1_NBCLCK_BCF_201701122132_2064.txt
20170101_340000_1_NBCLJK_BCF_201701122132_2063.txt
20170101_340000_1_TD_BCF_201701122132_2061.txt
20170101_340000_1_ZY_BCF_201701122132_2062.txt

要求將BCF後面的都截掉,保留.txt既可,shell指令碼如下:

 

for file in *.txt
do
   short=${file%BCF*.txt}
   echo ${short}BCF.txt
   mv ${file} ${short}BCF.txt
done

執行結果如下:

 

20170101_340000_1_HK_BCF.txt
20170101_340000_1_LY_BCF.txt
20170101_340000_1_NBCLCK_BCF.txt
20170101_340000_1_NBCLJK_BCF.txt
20170101_340000_1_TD_BCF.txt
20170101_340000_1_ZY_BCF.txt

為了保持檔名的一致性,需要將其中部分檔名中的NBCL去掉,這可以用rename命令完成,即:

rename _NBCL _ *BCF.txt

rename命令是專用於檔案重新命名的,上面的例子可以看出,rename既可以給單個檔案重新命名,也可以給批量檔案重新命名。
注意:rename命令是帶3個引數而不是2個引數,上面第二個引數為空,表示刪除第一個引數指定的字元。

執行結果如下:

 

20170101_340000_1_HK_BCF.txt
20170101_340000_1_LY_BCF.txt
20170101_340000_1_CK_BCF.txt
20170101_340000_1_JK_BCF.txt
20170101_340000_1_TD_BCF.txt
20170101_340000_1_ZY_BCF.txt

========================================

很好的方法吧,注意其中萬用字元的用法,其實關鍵就在於引數替換的運用,下面總結一下:

 

${param:-default} 如果param為空,整個式子的值就等於default
${#param} 整個式子的值為param的長度
${param%word} 從param尾部開始刪除與word匹配的最小部分,返回剩餘部分
${param%%word} 從param尾部開始刪除與word匹配的最長部分,返回剩餘部分
${param#word} 從param頭部開始刪除與word匹配的最小部分,返回剩餘部分
${param##word} 從param頭部開始刪除與word匹配的最長部分,返回剩餘部分

所謂最小部分就是第一次匹配,而最長部分就是最後一次匹配,例如:

假定aa=iamlaosongsongdc

 

則echo ${aa%song*} 顯示:iamlaosong

而echo ${aa%%song*} 顯示:iamlao

如果不用萬用字元,echo ${aa%%song} 顯示:iamlaosongsongdc,因為沒有匹配上。

 

再補充幾個用法

 

 

${param:=bar} 檢查param是否為空,若不為空,則返回其值;否則將param賦值為bar,然後返回這個值
${param:?bar} 若param為空或不存在,則輸出param:bar並異常終止指令碼
${param:+bar} param存在且不為空的情況下才返回param,否則返回空(貌似bar在這裡沒用)

 

${param:m:n} 從param左起第m個字元開始(0表示第一個),向後取n個字元,如省略n,則取其後所有字元
${param:0-m:n} 從param右起第m個字元開始(0-m相當於負值),向後取n個字元,如省略n,則取其後所有字元
${param:m} 從param左起第m個字元開始(0表示第一個),向後取所有字元

 

 

參見:點選開啟連結

 

 

 

相關文章