Estou tentando escrever um script para adicionar automaticamente informações de faixa e título à tag id3 de um arquivo mp3.
Neste ponto, eu peguei as informações do nome do arquivo e formatei-as para caber no comando id3v2, mas ao clicar em um título com várias palavras, recebo o erro Couldn't stat file '<second word of title>'
. Se eu apenas ecoar o comando id3v2 que está sendo executado, vejo o comando neste formato:
id3v2 -t Title\ Of\ Track -T 1 1_-_Title_Of_Track.mp3
Copiar/colar esse texto no terminal executa a marcação corretamente, mas é claro que falta a automação pretendida de script. Então, aqui está o script que pretende automatizar o processo:
#!/bin/bash
for track in *.mp3 ; do
id3v2 $(echo ${track} | sed -e 's/^\([1-9][0-9]*\)_-_\(.*\).mp3/-t \2 -T \1/' -e 's/_/\\ /g') ${track}
done
Alguma dica sobre por que o título é tratado como um único argumento quando digitado manualmente, mas não quando em script?
Com base nos comentários de Valentin B e mueh, abandonei
sed
a análise no script e usei a manipulação de string do bash. Emborased
fosse bom para analisar vários dados e ordená-los em um único comando, a expansão do comando para usar o resultado dividiria a saída em "palavras" que seriam delimitadas por espaços, mesmo que os espaços fossem precedidos por barra invertida ou cercados por aspas .Então, em vez de tentar construir todos os argumentos
id3v2
em uma única passagem comsed
, ele foi dividido em analisar o número da faixa e o título separadamente usando a manipulação de string do bash. O resultado final:Obrigado a mueh por explicar exatamente por que minha abordagem na questão não estava funcionando, e Valentin B por introduzir a manipulação de strings do bash.