Acho que você está procurando por isso:
#!/bin/bash
clear
for filename in *.mkv
do
## Exit if there are no srt files
[ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename"
done
Eu removi o IFS='\n'
, pois ele não está fazendo nada de útil lá, seu for
loop é bastante seguro, mesmo com nomes que contenham espaços em branco, desde que você cite suas variáveis.
O [ -e foo ]
testa a existência de foo
. Por outro lado, [ ! -e foo ]
é verdadeiro se não houver foo
. Nesse caso, foo
é um glob ( *.srt
), portanto, o teste será falso se algum arquivo correspondente for encontrado. No script acima, &&
significa que, se nenhum arquivo srt
for encontrado, a mensagem de erro será impressa e o script será encerrado.