You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Bash脚本批量重命名MKV影片:给年份加括号并清理冗余

MKV影片批量重命名解决方案

我的硬盘单个目录中有数百部MKV格式影片,命名格式如下:

Gold.2022.mkv
Oppenheimer.2023.Imax.mkv
Ted.2012.Unrated.mkv
Dr.Strangelove.1964.mkv

需要编写Bash脚本自动重命名这些文件:移除年份后的所有内容(保留.mkv扩展名)、删除年份前的点号,最后给年份加上括号,使文件变为:

Gold (2022).mkv
Oppenheimer (2023).mkv
Ted (2012).mkv
Dr.Strangelove (1964).mkv

若无法实现完整需求,仅给年份加括号的方法是什么?

一、完整需求的Bash脚本实现

两种方式可选,按需使用:

1. 用Perl版rename命令(一行搞定)

大部分Linux发行版自带Perl版rename,支持正则替换,直接运行:

rename 's/^(.+)\.(\d{4})\..*\.mkv$/$1 ($2).mkv/' *.mkv

逻辑说明:

  • ^(.+)\.(\d{4}):捕获文件名主体(年份前的部分)和4位数字年份
  • \..*\.mkv$:匹配年份到.mkv之间的所有冗余内容并删除
  • $1 ($2).mkv:拼接成「文件名 (年份).mkv」的格式

2. 纯Bash循环(无额外依赖)

如果系统没有Perl版rename,用原生Bash循环也能实现:

for file in *.mkv; do
    # 先去掉.mkv扩展名
    name_no_ext="${file%.mkv}"
    # 匹配主体和年份
    if [[ "$name_no_ext" =~ ^(.+)\.([0-9]{4}) ]]; then
        prefix="${BASH_REMATCH[1]}"
        year="${BASH_REMATCH[2]}"
        new_name="${prefix} (${year}).mkv"
        # 加-n参数先预览,确认无误后再删掉-n执行重命名
        mv -n "$file" "$new_name"
    fi
done

二、仅给年份加括号的方法

如果只需要给年份套括号、保留其他后缀内容,用下面的命令:

1. Perl版rename快捷方式

rename 's/\.(\d{4})/ ($1)/' *.mkv

执行后Oppenheimer.2023.Imax.mkv会变成Oppenheimer (2023).Imax.mkv。

2. 纯Bash循环实现

for file in *.mkv; do
    if [[ "$file" =~ ^(.+)\.([0-9]{4})(.*\.mkv)$ ]]; then
        prefix="${BASH_REMATCH[1]}"
        year="${BASH_REMATCH[2]}"
        suffix="${BASH_REMATCH[3]}"
        new_name="${prefix} (${year})${suffix}"
        mv -n "$file" "$new_name"
    fi
done

内容的提问来源于stack exchange,提问作者Entropy1024

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:32:33