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.