Linux中如何批量截短檔名
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表示第一個),向後取所有字元 |
參見:點選開啟連結
相關文章
- Linux 批量修改檔名Linux
- linux/unix 批量改檔名Linux
- Linux rename命令批量修改檔名Linux
- win10批量修改檔名的步驟_win10如何批量修改檔名Win10
- Linux 批量修改檔案字尾名Linux
- Linux批量更改檔案字尾名Linux
- 批量修改檔名
- linux 批量修改檔名字尾名命令renameLinux
- java批量修改檔名Java
- 批量修改檔名 與 批量檔案字元替換字元
- 快速批量修改檔名[機器學習]機器學習
- 批量修改檔名實踐
- CMD批量改變檔名
- 在Linux中使用mmv命令批量修改檔名稱Linux
- 批量處理檔名稱(上)
- P處理 批量更改檔名
- linux下批量修改檔案中的字元Linux字元
- 批量修改檔名的bash指令碼指令碼
- 批量提取資料夾內檔名
- node實現檔案屬性批量修改(檔名)
- Python批量修改檔名和檔案型別Python型別
- win10資料夾中怎樣批量獲取所有檔名稱_win10批量提取資料夾內檔名的方法Win10
- python 批量給檔名新增字尾Python
- win10 如何批量改字尾 win10怎麼批量改檔案字尾名Win10
- IIS短檔名漏洞原理與挖掘思路
- Linux批量刪除檔案Linux
- 如何在 Linux 中建立 SSH 別名Linux
- Puppeteer之大屏批量截圖
- Linux特殊檔名Linux
- 利用Python快速批量修改資料集檔名Python
- [20220329]批量修改檔名.txt
- 中文檔名在JSP中如何連結???JS
- linux 模糊批量刪除檔案Linux
- linux 檔案批量重新命名Linux
- Linux下批量替換檔案中的字元 - sed (stream editor)Linux字元
- dos命令:ren或rename,批量修改檔案字尾名
- 批量重新命名簽名好以後的檔案
- Git中如何設定區分檔名大小寫Git