Teste g++ *.o $( echo folder/*.o |tr ' ' "\n" | egrep -v folder/main.o ) , assumindo que nenhum dos folder/*.o tem espaços em seus nomes.
Veja como funciona:
echo folder/*.o produz uma lista separada por espaços dos nomes de arquivos, com o diretório.
tr ' ' "\n" altera todos os espaços para novas linhas (fornecendo um nome de arquivo por linha, o que torna egrep happy.
egrep -v folder/main.o elimina o nome do arquivo indesejado da lista.
$() coloca o restante dos nomes dos arquivos na linha de comando. Como $IFS padrão é SPACE, TAB, NEWLINE, não precisamos tr deles de volta aos espaços.