Quando se descobriu que o melhor comportamento é quando você coloca todos os arquivos em um único fluxo, eu estava descobrindo as coisas com um loop. Mas então percebi que há uma maneira ainda mais fácil (e melhor):
find . -iname 'pattern' -exec cat {} \; | gzip --best - > file.gz
Todas as invocações de cat irão para o stdout de find, há apenas uma invocação de gzip. Rezipar o resultado produz o mesmo tamanho de arquivo. Você pode conseguir um resultado ainda melhor (em termos de número de invocações de gato, não em tamanho de arquivo) se você usar a + versão de -exec (veja a página man find), mas eu não testei isso.