Use um loop for simples:
for i in *.txt.gz; do zcat "$i" > "${i%.*}"; done
zcat é equivalente a gunzip -c , mas menor.
A variável $i recebe os nomes de todos os arquivos *.txt.gz no diretório atual (um após o outro). ${i%.*} retira a extensão ( .gz ) do nome do arquivo.
Nota : esta é a sintaxe do bash.