Pesquise arquivos zipados * e * não zipados em um único hit

2

Eu tenho uma pasta com uma mistura de arquivos de log zipados e descompactados que eu quero pesquisar.

Eu posso pesquisar o não zipado com

grep -r "my-search-string" /path/to/folder

e pesquise os arquivos compactados com

find /path/to/folder -name "*.gz" -exec zcat "{}" + | grep "my-search-string"

Existe uma linha única que eu posso usar para pesquisar todos os arquivos zipados e descompactados em /path/to/folder ?

obrigado, Max

    
por Max Williams 14.02.2014 / 13:04

2 respostas

4

zgrep é seu amigo!

   Zgrep  invokes grep on compressed or gzipped files.  All options speci‐
   fied are passed directly to grep.  If no file is  specified,  then  the
   standard input is decompressed if necessary and fed to grep.  Otherwise
   the given files are uncompressed if necessary and fed to grep.

Acabei de notar que algumas versões do zgrep não têm uma opção -r. Nesse caso, você pode usar seu padrão de localização para capturar todos os arquivos e usar o zgrep em vez do grep, como:

find . -type f -exec zgrep 'my search string' "{}" \;

    
por 14.02.2014 / 13:39
1

Exporte algumas variáveis úteis para "my-search-string" e caminho e, em seguida, pesquise:

SEARCH='my-search-string' ; SEARCHPATH='/path/to/folder' ; grep -r "$SEARCH" $SEARCHPATH && find $SEARCHPATH -name "*.gz" -exec zcat "{}" + | grep "$SEARCH"
    
por 14.02.2014 / 13:29