@Steve Weet está quase lá. O uso de / dev / null como um argumento adicional é uma boa maneira de forçar a exibição do nome do arquivo (lembre-se disso, obrigado Steve), mas ele ainda executa o exec para cada arquivo encontrado - uma sobrecarga enorme.
Você deseja executar o zgrep o mínimo de vezes possível, aproveitando ao máximo cada execução:
find . -iname '*.gz' -print0 | xargs -0 zgrep PATTERN
xargs
fornecerá o máximo de args (nomes de arquivos) ao zgrep e executará repetidamente até que tenha usado todos os arquivos fornecidos pelo comando find
. O uso das opções -print0
e -0
permite que ele funcione se houver espaços em qualquer um dos nomes de arquivos ou diretórios.
No Mac OS X, você pode obter o mesmo efeito sem xargs:
find . -iname '*.gz' -exec zgrep PATTERN {} +