Como você não parece precisar dos nomes dos arquivos, você pode usar -p
para gerar o conteúdo
dos arquivos zip:
(for i in ./*.zip; do unzip -p "$i"; done; cat ./*.log) |
grep -F ERROR | sort
ou se os arquivos errors.zip estiverem em todo lugar:
(find . -type f -name "*.zip" -exec unzip -p {} \;
find . -type f -name "err*.log" -exec cat {} + ) |
grep -F ERROR | sort
Isso elimina o nome do arquivo zip e o nome do arquivo de conteúdo específico que o descompactador extrai, bem como o nome do arquivo de log. Se você precisar dessa informação, eu escreveria um programa python para a tarefa, que insere o nome do arquivo em algum lugar em cada uma das linhas encontradas (não antes da data, é claro). Você pode usar o módulo zipfile
padrão para processar o conteúdo de um arquivo zip sem primeiro extrair os arquivos e fazer com que o programa grave no stdout para canalizar para sort