Você tem algumas soluções possíveis:
Simplesmente
$ ./script *g.log >output
... e espere que *g.log
não se expanda para algo que torne a linha de comando muito longa. Isso não é muito robusto.
Se o seu script não depender do número de arquivos fornecidos, ou seja, se a saída puder ser anexada a output
para cada arquivo de entrada, essa é outra solução:
$ find ./ -type f -name "*g.log" | xargs ./script >output
Uma terceira solução seria mover o loop para o script em si:
for f in *g.log; do
# old code using "$f" as file name
done
Isso não tem o problema com a restrição de comprimento da linha de comando, pois está em um script.
A invocação do script seria agora
$ ./script >output