更改文件名日期格式

时间:2018-11-06 13:49:37

标签: regex bash shell rename batch-rename

我有一些文件机器人无法识别的文件,因为它们具有以下命名方案。

SOAP 3rd Oct 2018 part 1 1080p (USER) [GROUP].mp4

(名称更改)

但是Filebot确实认识到这种命名方案和需求

SOAP 2018 10 01 Part 1 (USER) [GROUP].mp4

我需要一个脚本,该脚本可以根据该日期格式重命名这些文件。我曾尝试阅读正则表达式,但是直截了当。我想了解如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

使用此处字符串中的read将文件名解析为字段,然后使用date重新格式化。

  

已更新为处理日期之前元素之间的空格。

$: for f in *mp4
   do IFS='!' read a date b <<< "$( echo "$f" | sed -E '
        s/^(.+) ([0-9]{1,2})[snrt][tdh] ([JFMASOND][aepuco][nbrylgptvc]) ([0-9]{4}) (.*)/\1!\3-\2-\4!\5/' )"
      newName="$( date -d "$date" +"$a %Y %m %d $b" )"
      echo "'$f' -> '$newName'"
      mv "$f" "$newName"
      ls -1 "$newName"
   done
'Coronation Street 2nd Nov 2018 part 2 1080p (Deep61) [WWRG].mp4' -> 'Coronation Street 2018 11 02 part 2 1080p (Deep61) [WWRG].mp4'
'Coronation Street 2018 11 02 part 2 1080p (Deep61) [WWRG].mp4'
'SOAP 3rd Oct 2018 part 1 1080p (USER) [GROUP].mp4' -> 'SOAP 2018 10 03 part 1 1080p (USER) [GROUP].mp4'
'SOAP 2018 10 03 part 1 1080p (USER) [GROUP].mp4'

请注意,我在回声中使用了单引号,ls将其放在输出中,但它们不是文件名的一部分。