2017-03-10 105 views
0

我試圖將文件名格式爲ABCD-YYMMDD-HHMMSS-EFGH的文件列表重命名爲ABCD-EFGH。文件名重命名 - 子字符串日期刪除

例如,我有以下幾點:

Case1-20170309-110213-TOCLOSE Case2-20170416-110314-TOCLOSE Case3-20171112-110715-TOCLOSE

而且我希望他們重新命名爲:

案例1 - TOCLOSE 情況2,TOCLOSE 情形3-TOCLOSE

基本上我只是想擺脫嵌入日期和時間文件名稱。隨着日期和時間都不同,我能想到的唯一的辦法就是重命名 - - - 模式只是 -

研究後,我嘗試以下,但沒有成功:

命名的/ * * * * -/- /'*

對不起,因爲我完全bash腳本初學者在這裏我真的可以使用一些指導。

謝謝。

安迪

回答

0

隨着renameprename):

rename -n 's/^([^-]+-).*-([^-]+$)$/$1$2/' *-*-*-* 
  • ^([^-]+-)從開始獲取直到第一-的部分,並把匹配中捕獲組1

  • ([^-]+$)$ gets the portion at end after last - `,並把這場比賽放在第2組隊中

  • 在更換時,的兩個攝像組使用,$1$2

-n做了試運行,刪除-n實際行動。


隨着殼放慢參數擴展,以獲得所需要的部分:

for f in *-*-*-*; do echo mv -i "$f" "${f%%-*}-${f##*-}"; done 
  • ${f%%-*}從可變f

  • ${f##*-}剝掉一切從第一-滴子串到最後- 刪除echo實際行動。


例子:

% rename -n 's/^([^-]+-).*-([^-]+$)$/$1$2/' *-*-*-* 
Case1-20170309-110213-TOCLOSE renamed as Case1-TOCLOSE 
Case2-20170416-110314-TOCLOSE renamed as Case2-TOCLOSE 
Case3-20171112-110715-TOCLOSE renamed as Case3-TOCLOSE 

% for f in *-*-*-*; do echo mv -i "$f" "${f%%-*}-${f##*-}"; done 
mv -i Case1-20170309-110213-TOCLOSE Case1-TOCLOSE 
mv -i Case2-20170416-110314-TOCLOSE Case2-TOCLOSE 
mv -i Case3-20171112-110715-TOCLOSE Case3-TOCLOSE 
+0

非常詳細的解釋和它的工作!感謝您的幫助! –