MMV 海量文件重命名

Joc*_*ala 7 rename mmv

我无法确定 mmv 模式。我有一堆具有这种模式的视频文件:

my.program.name.season.NN.episode.NN.-.title.avi
Run Code Online (Sandbox Code Playgroud)

我需要将它们移动到:

my.program.name.sNNeNN.title.avi
Run Code Online (Sandbox Code Playgroud)

我似乎无法得到正确的模式...

αғs*_*нιη 6

TL; 博士

rename -n 's/^((\w+\.+){3})(.).*\.(.*)\.(.).*\.(.*)\.\-(\..*)$/$1$3$4$5$6$7/' *
Run Code Online (Sandbox Code Playgroud)
  • \w+匹配一个或多个单词字符,即[a-zA-Z0-9_]+[1]
  • \.+匹配一个或多个点 ( .) 字符 [2]

    注意的是\.在匹配.字符。我们需要使用\.来表示.as.在正则表达式中具有特殊含义。在\被称为转义代码,还原以下字符的原始字面意思。

  • (\w+\.+){3}^文件名的开头(匹配名称的开头)开始匹配以上 [1],[2] 组字符的任何精度的最多 3 次。
    这将匹配或返回my.program.name.

    请注意,正则表达式周围的额外括号用于匹配分组。分组匹配开始(和结束,)用于提供所谓的反向引用。反向引用包含存储在特殊变量$1$2...$9中的匹配子字符串,其中 $1 包含与第一对括号匹配的子字符串,依此类推。

  • .元字符点 (.) 匹配任何单个字符。例如...匹配任意 3 个字符。所以有了这个,(.)我们匹配了season它的第一个字符s

  • .*\.匹配上面单个字符之后的所有内容,直到第一个.看到。正如您所看到的,我们没有将其捕获为一组匹配项,因为我们想从我们的名称中删除它,其中匹配eason..

  • (.*)匹配以上匹配后的所有内容。这匹配NN. 此处使用括号是因为我们希望将其保留在文件名中。

  • \.在上面的匹配之后匹配一个点。一.后先NN

  • (.)再次使用这个我们匹配上面匹配之后的第一个单个字符。这只会返回e

  • .*\.将匹配上述 match 之后的所有内容,直到 first .。会匹配pisode.

  • (.*)匹配上面匹配中最后一个匹配点之后的任何内容。这将匹配 second NN

  • \.\-匹配一个点.后跟一个破折号-。将匹配或返回.-

  • 最后(\..*)$匹配一个点.和之后的所有内容,以文件名结尾。$匹配文件名或输入字符串的结尾。

注意:删除-n选项以执行实际重命名。