Eu quero um loop para passar por arquivos com duas extensões diferentes

0

Eu quero que o loop a seguir passe por arquivos m4a e arquivos webm. No momento eu uso dois loops diferentes, o outro apenas substitui todo o m4a deste loop. Além disso, os arquivos que as saídas ffmpeg devem remover uma extensão m4a, se fosse um arquivo m4a, e uma extensão webm, se fosse um arquivo webm. E substitua isso por mp3. (Como faz aqui com m4a). Eu não tenho idéia de como fazê-lo, acho que tem algo a ver com expressões regex, mas não tenho idéia de como realmente usá-los nem nunca encontrei um bom tutorial / documentação, então se você tiver um, por favor, vinculá-lo .

for i in *.m4a ; do
        echo "Converting file $converted / $numfiles : $i"
        ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i/.m4a}.mp3"
        mv "$i" ./done
        converted=$((converted + 1))
done
    
por usbpc102 20.12.2015 / 14:55

1 resposta

2

Para fazer um loop em vários grupos de arquivos no bash, basta especificar todos eles na lista for.
Se não houver nenhum arquivo que corresponda a um grupo (por exemplo, nenhum arquivo * .webm), o para ainda fará um loop uma vez (com o grupo spec (* .webm) como um valor da variável i ). Se você quiser evitar que você precise definir a opção nullglob : < br> shopt -s nullglob

Para remover uma extensão de um nome de arquivo (que tem uma extensão!) use este expansão de parâmetros : ${i%.*}

Seu script ficaria assim:

shopt -s nullglob
for i in *.m4a *.webm; do
        echo "Converting file $converted / $numfiles : $i"
        ffmpeg -hide_banner -loglevel fatal -i "$i" "./mp3/${i%.*}.mp3"
        mv "$i" ./done
        converted=$((converted + 1))
done
    
por 20.12.2015 / 21:36