O comando zgrep é muito útil para grepping em arquivos compactados e evita a necessidade de canalizar zcat para grep . Você também não precisa usar o loop for para criar uma lista de arquivos por globbing ( correspondência de padrões de shell).
zgrep U2779897722719715411 *.log.gz >> sara.log
Esse comando exibirá o nome do arquivo e a linha contendo U2779897722719715411 separada por um caractere : .
Se você não quiser o prefixo do nome do arquivo, poderá usar a opção -h para zgrep :
zgrep -h U2779897722719715411 *.log.gz >> sara.log
Isso também pode ser obtido com um loop, mas evite usar ls e execute o redirecionamento para o arquivo após a conclusão do loop:
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
Como alternativa, se você quiser apenas o nome do arquivo dos arquivos que contêm essa string de usuário U2779897722719715411, você pode usar a opção -l para zgrep em qualquer um dos comandos acima:
zgrep -l U2779897722719715411 *.log.gz >> sara.log
ou
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log