电视剧和 Bash 脚本

电视剧和 Bash 脚本

我刚刚下载了一季电视连续剧和字幕。

如果 .mp4 和 .srt 文件具有相同的名称,vlc 会自动将它们添加到视频中。

它们唯一的共同点是集数(E01、E02……)。

我想编写一个可以自动更改名称的脚本,但我不知道如何...

例如AE01 Video.mp4Sub E01.srt必须有 .mp4 的名称
有什么建议吗?

先感谢您!

答案1

假设所有视频文件都与该模式匹配*Exx*.mp4,并且所有字幕文件都*Exx*.srtxx相同的两位数十进制数匹配,则可以使用以下 shell 脚本重命名文件:

#!/bin/bash
shopt -s nullglob

printf '%s\n' *.mp4 |
sed -nre 's/^.*E([0-9]{2}).*$/\1 &/p' |
while read -r episode video; do
  for subtitle in *"E${episode}"*.srt; do
    dst="${video%.*}.${subtitle##*.}"
    if [ "$dst" != "$subtitle" ]; then
      mv -viT -- "$subtitle" "$dst"
    fi
  done
done

我在命令中添加了交互向导 ( -i) mv,以防名称中有多个具有相同剧集编号的字幕文件或已存在同名文件。它也是幂等,这意味着多次运行它不会改变结果,因此您可以随时中止脚本,调查某些事情并稍后再次重新运行它。

您可以使用临时目录中创建的一些空文件来测试它:

mkdir /tmp/scratch
cd /tmp/scratch
touch 'AE01 Video.mp4' 'Sub E01.srt'

相关内容