![电视剧和 Bash 脚本](https://linux22.com/image/1137139/%E7%94%B5%E8%A7%86%E5%89%A7%E5%92%8C%20Bash%20%E8%84%9A%E6%9C%AC.png)
我刚刚下载了一季电视连续剧和字幕。
如果 .mp4 和 .srt 文件具有相同的名称,vlc 会自动将它们添加到视频中。
它们唯一的共同点是集数(E01、E02……)。
我想编写一个可以自动更改名称的脚本,但我不知道如何...
例如AE01 Video.mp4
,Sub E01.srt
必须有 .mp4 的名称
有什么建议吗?
先感谢您!
答案1
假设所有视频文件都与该模式匹配*Exx*.mp4
,并且所有字幕文件都*Exx*.srt
与xx
相同的两位数十进制数匹配,则可以使用以下 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'