Supondo que todos os arquivos de vídeo correspondam ao padrão *Exx*.mp4
e todos os arquivos de legenda coincidam com *Exx*.srt
, onde xx
é o mesmo número decimal de dois dígitos, você pode usar o seguinte script de shell para renomear seus arquivos:
#!/bin/bash
shopt -s nullglob
printf '%s\n' *.mp4 |
sed -nre 's/^.*E([0-9]{2}).*$/ &/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
Eu adicionei a bruxa interativa ( -i
) ao comando mv
caso haja vários arquivos de legenda com o mesmo número de episódio no nome ou um arquivo com o mesmo nome já exista. Ele também é idempotente , o que significa que executá-lo várias vezes não altera o resultado, portanto você pode abortar o script a qualquer momento, investigar algo e executá-lo novamente mais tarde.
Você pode testá-lo com alguns arquivos vazios criados em um diretório temporário:
mkdir /tmp/scratch
cd /tmp/scratch
touch 'AE01 Video.mp4' 'Sub E01.srt'