Substituindo espaço em branco / caracteres com barras invertidas [duplicado]

0

Eu quero converter um monte de mkvs para mp4s com o seguinte comando:

for i in $(ls *mkv); do ffmpeg -i $i -vcodec copy -acodec copy $i.mp4; done;

No entanto, os nomes dos arquivos têm espaços em branco e hífens neles, portanto, o comando não funciona corretamente. (Quando eu substituo manualmente The File - 01.mkv por The\ File\ \-\ 01.mkv , o mesmo comando funciona).

Qual é a melhor maneira de fazer isso funcionar?

    
por WhiteSpaceQuestionPerson 06.03.2015 / 15:52

1 resposta

8

Você precisa citar as variáveis e evitar a substituição de comandos:

for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i}.mp4"; done

Veja Quando é necessário fazer uma cotação dupla? para obter uma explicação detalhada sobre citando.

Enquanto estou nisso, o acima produz arquivos com uma extensão .mkv.mp4 ; para corrigir isso:

for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i%%.mkv}.mp4"; done
    
por 06.03.2015 / 15:55