Eu preciso procurar uma pasta de arquivos gzipados por uma string, no entanto, preciso pesquisar começando na parte inferior de cada arquivo. Então eu preciso do comando para retornar resultados quando ele tiver 10 correspondências totais em todos os arquivos.
Até agora eu tenho isso:
find '/tmp/myfiles/' -type f \( -iname '*.txt' -o -iname '*.gz' \) -exec zcat -f {} \+ 2>&1 | tac | zgrep -ish 'foobar' | tail -n +1 | head -n 10
Estou usando zcat
para obter todo o conteúdo do arquivo e, em seguida, uso tac
para revertê-los. Isso é significativamente mais lento que isso:
find '/tmp/myfiles/' -type f \( -iname '*.txt' -o -iname '*.gz' \) -exec zgrep -ish 'foobar' {} \+ 2>&1 | tail -n +1 | head -n 10
No entanto, isto apenas lê a partir do topo do arquivo, eu gostaria de uma maneira de pesquisar em sentido inverso sem ter que ler o arquivo completo primeiro ...
Essencialmente, eu preciso "transmitir" o arquivo para o comando grep, começando pela parte inferior.