2017-03-10 123 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

非常详细的解释和它的工作!感谢您的帮助! –