como evitar o espaço no nome do arquivo?

3

Eu tenho um monte de arquivos que precisam ser convertidos de .mp4 para .mpeg.one . Um amigo meu me sugeriu esse roteiro simples. No entanto, não funciona porque os nomes dos arquivos contêm espaços em branco.

Aqui está o script:

for f in $(ls *.mp4); do ffmpeg -i "$f".mp4 "$f".mprg; done
    
por Ten-Coin 03.02.2013 / 13:19

3 respostas

11

Você não precisa usar ls neste caso. Como regra geral, sempre tente usar recursos internos e internos do shell, em vez de confiar em programas externos (por exemplo, ls ) que podem introduzir problemas com soluções alternativas ruins.

Além disso, você não deve 'manualmente' anexar a extensão ao nome do arquivo de entrada (aquele que você dá a -i ) e você deve remover a extensão no arquivo de saída.

Então o comando deve ser:

for f in *.mp4; do ffmpeg -i "$f" "${f%.mp4}".mprg; done
    
por Andrea Corbellini 03.02.2013 / 13:32
4

Em vez de ls , você pode usar find -print0 e xargs -0 :

find -name '*.mp4' -print0 | xargs -0 -n1 ffmpeg -i '{}' '{}'.mpeg

Seguido por um novo nome depois:

rename s/mp4.mpeg$/mpeg/ *.mp4.mpeg
    
por Dennis Kaarsemaker 03.02.2013 / 13:31
2
  • Não ls necessário
  • Você provavelmente quis dizer .mpeg como extensão
  • Se você colocar o " , os espaços não serão um problema
  • ffmpeg -i "$f".mp4 no seu comando procurará por ex. arquivos.mp4.mp4, que você provavelmente não quis dizer
  • Esteja ciente de que seus arquivos de saída serão nomeados, por exemplo arquivos.mp4.mpeg

Solução possível:

for f in *.mp4; do ffmpeg -i "$f" "$f".mpeg; done
    
por phoibos 03.02.2013 / 13:39

Tags