Linux: Como obter os mesmos nomes de arquivos de saída de conversão em lote com extensão diferente?

3

Estou usando o Timidity para converter muitos arquivos midi para mp3. Eu queria saber se existe uma maneira padrão de especificar um padrão de saída para que ele converta todos os arquivos *.mid para /path/*.wav

Eu pergunto isso em geral, porque também seria o caso em um comando mv . Ou isso está vinculado a uma implementação específica no aplicativo?

Então, como mover um arquivo * .mid para * .wav?

    
por Peterdk 20.10.2011 / 13:22

2 respostas

1

Suponha que você queira apenas renomear arquivos. Então, se você estiver usando um shell Bourne (como sh , bash ), poderá executar o comando em arquivos que correspondam a um padrão usando um for loop. Aqui estão as versões multilinha e de linha única equivalentes:

for f in *.mid
do
    mv "$f" "${f%.mid}.wav"
done
for f in *.mid; do mv "$f" "${f%.mid}.wav"; done

O loop for executa os comandos com $f sendo cada palavra na expansão de *.mid e ${f%.mid} remove o sufixo .mid para que possamos substituí-lo por .wav . As aspas tornam este programa correto para nomes de arquivos contendo espaços (mas não nomes de arquivos que começam com "-", já que isso depende do comando). Se você quiser combinar vários grupos de arquivos em vez de tudo, poderá usar vários padrões como for f in alpha-*.mid beta-*.mid; do ...

Você pode usar qualquer comando que desejar no lugar de mv . Eu dei uma olhada na página man do Timidity, mas não consegui descobrir onde é necessário um nome de arquivo de saída, então eu não dei um exemplo.

    
por 21.10.2011 / 03:15
1

Eu fiz um script python que move * .mid para * .wav.

#!/usr/bin/python2.7

import sys
import glob
import shutil
import os

try:
    dir = sys.argv[1]
except IndexError:
    print "Usage: "+sys.argv[0]+" dir"
    print "Example: "+sys.argv[0]+" /home/user/dir"
    sys.exit(1)

for file in glob.glob(os.path.join(dir, '*.mid')):
    newfile = file.partition(".mid")
    newfile = newfile[0]
    newfile = newfile+".wav"
    shutil.move(file, newfile)
    
por 20.10.2011 / 13:42