Tv series e Bash-scripting

1

Acabei de baixar uma temporada de TV e as legendas.

Se os arquivos .mp4 e .srt tiverem o mesmo nome, vlc os adiciona automaticamente aos vídeos.

A única coisa em comum que eles têm é o número do episódio (E01, E02, ...).

Eu quero escrever um script que mude automaticamente os nomes, mas eu não sei como ...

Por exemplo, AE01 Video.mp4 e Sub E01.srt devem ter o nome de .mp4
Alguma sugestão?

Obrigado antecipadamente!

    
por sworwitz 30.05.2016 / 19:50

1 resposta

0

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'
    
por David Foerster 31.05.2016 / 21:11