将文件名的中间部分移到前面

use*_*394 2 shell rename

我有以样式命名的文件02.04.11 DJ Kilbot.mp3(用于多个日期),我想以这种方式重新格式化名称:DJ Kilbot 2011-02-04.mp3. 换句话说,当前格式是MM.DD.YY DJ-NAME.mp3,我想将其更改为DJ-NAME YYYY-MM-DD.mp3. 对于几年的文件,最简单的方法是什么?

Spa*_*awk 5

cd到目录,然后运行以下命令(使用perl-rename)。这首先是“试运行”。

rename -n 's/^([0-9]{2})\.([0-9]{2})\.([0-9]{2}) (.*)\.mp3$/$4 20$3-$1-$2.mp3/' *
02.04.11 DJ Kilbot.mp3 -> DJ Kilbot 2011-02-04.mp3
Run Code Online (Sandbox Code Playgroud)

如果您对输出感到满意,请真正运行它。

rename 's/^([0-9]{2})\.([0-9]{2})\.([0-9]{2}) (.*)\.mp3$/$4 20$3-$1-$2.mp3/' *
Run Code Online (Sandbox Code Playgroud)

解释

  • rename -n:运行测试“试运行”。
  • 's/FOO/BAR/'替换正则表达式FOO并替换为BAR.
  • ^([0-9]{2})\.([0-9]{2})\.([0-9]{2}) (.*)\.mp3$: 正则表达式捕获。匹配字符串的开头^,然后是三组[0-9]{2}(即两个连续的数字),用点分隔(\.转义时)。然后是一个空格 和(.*)\.mp3$。Parens()捕获用于替换的内容。
  • $4 20$3-$1-$2.mp3: 用 DJ 名称替换第四个捕获组 ( $4) 或(.*)以上,然后是指定的字符串的其余部分(即第三、第一和第二组)。
  • *: 作用于目录中的所有文件。

简化

这个正则表达式内置了一些错误检查。如果您确定所有文件的命名一致,您可以将其稍微简化为以下内容。

rename 's/^(..)\.(..)\.(..) (.*)\.mp3$/$4 20$3-$1-$2.mp3/' *
Run Code Online (Sandbox Code Playgroud)