Com os comentários recebidos, consegui encontrar uma solução curta e bonita:
find . -name '*.mkv' | while read f; do echo ffmpeg -i "$f" "${f%.*}.mp4"; done
Este artigo diz que você pode usar a sintaxe %
para remover extensões de arquivo:
$ s=a/b.mkv
$ echo ${s%.*}
a/b
Como você combina a sintaxe %
com o %
in xargs
para alcançar o resultado desejado para um conjunto de linhas?
$ cat | xargs -I % echo ffmpeg -i % (INSERT MAGIC HERE)
a/b.mkv
ffmpeg -i a/b.mkv a/b.mp4
c/d.mkv
ffmpeg -i c/d.mkv c/d.mp4
Com os comentários recebidos, consegui encontrar uma solução curta e bonita:
find . -name '*.mkv' | while read f; do echo ffmpeg -i "$f" "${f%.*}.mp4"; done
Com base na resposta anterior, você também pode usar zsh
. Se esta é sua concha:
for i in **/*.mkv; echo ffmpeg -i $i $i:r.mp4
Caso contrário:
zsh -c 'for i in **/*.mkv; echo ffmpeg -i $i $i:r.mp4'
Isso evitaria problemas com espaço em branco em nomes de arquivos.