ls -l parece dar uma concatenação dos nomes de arquivos encontrados em um diretório

0

Eu quero escrever um shellscript para converter todos os arquivos .ogg em um diretório para arquivos .mp3. Os nomes dos arquivos contêm espaços, então eu uso várias aspas duplas no sequencia de comandos. O comando que eu uso é

for FILE in "'ls -1 *.ogg'" ; do
    ROOTFILE='printf "%s\n" "$FILE" | sed "s/ogg//" '
    ffmpeg -i "$FILE" "$ROOTFILE"mp3
done

Mas todos os nomes de arquivos no diretório agora são vistos pelo ffmpeg como uma string. Como posso separar os nomes de arquivos individuais, preservando os espaços neles?

    
por Jogchum 06.08.2017 / 14:24

1 resposta

1

Resumindo todos os comentários (escritos por Eric Renouf , steeldriver e cas ), o solução para o seu problema é

for f in *.ogg; do
    ffmpeg -i "$f" "${f%.ogg}.mp3"
done

Isso evita alguns problemas com sua tentativa:

  • analisando a saída de ls ;
  • reinventando basename (que geralmente pode ser substituído pelo processamento de sequência de shell, como acima).
por 08.08.2017 / 23:37