Zgrep récursif ne fonctionne pas

7

J'ai une hiérarchie de répertoires qui contient de nombreux .gzfichiers. Je veux pouvoir les récursivement les grep pour la chaîne "foo". D'après ce que j'ai lu en ligne, ce qui suit devrait fonctionner:

zgrep -R -H "foo" .

Cependant, cela ne renvoie jamais aucun résultat. Si je remplace le point par le nom d'un fichier, cela fonctionne. Par exemple,

zgrep -R -H "foo" myFile.gz

cependant, évidemment, cela ne sera plus récursif.

Je sais que "foo" se trouve dans certains fichiers car la commande suivante renvoie de nombreux résultats:

find . -iname "*.gz" | xargs zgrep "output" | less

Est-ce que quelqu'un sait pourquoi ma commande zgrep récursive ne fonctionne pas? Je suis sur une boîte Linux RHEL

Nosrettap
la source

Réponses:

3

Votre presque là. Essaye ça:

zgrep -R -H "foo" *.gz

EDIT: Hmmmm… intriguant!

Selon mon zgrep, -R (récursif) n'est pas une option. Son simplement pas pris en charge. Je voudrais vérifier ce que dit la page de manuel de votre zgrep.

Une alternative, qui dépend d'un seul niveau de sous-répertoires, est la suivante:

zcat */*.gz | grep <needle>

Mais je suggérerais que votre commande de recherche est probablement meilleure!

GeoSword
la source
Quand j'essaie, je reçois:zsh: no matches found: *.gz
Nosrettap
3

La façon dont je fais habituellement est:

zgrep "foo" $(find -name "*.gz")

Si cette commande retourne "Argument list too long", essayez cette méthode:

for I in $(find -name "*.gz"); do zgrep "foo" $I; done
lepe
la source
3

Vous devez installer zutils. Ceci remplacera le zgrep par défaut et limité sur votre système par un autre récursif.

Sur les systèmes debian vous exécutez apt-get install zutilsalors vous pouvez zgrep -rH myword .et utiliser la plupart des autres paramètres de grep que vous connaissez et amour.

nzn
la source
Salut électeur à la baisse. J'adorerais savoir pourquoi ce n'est pas une bonne idée. Personnellement, je l'ai utilisé et j'ai trouvé ça génial.
Nzn
(+1) Vous ne savez pas pourquoi le vote négatif. Pour ceux intéressés, il y a une bonne explication sur la version de zutils par rapport à la version gzip de zgrep ici: unix.stackexchange.com/questions/187742/…
lepe
0

Utilisez tamiser - c'est super rapide .

sift -z foo

-zest utilisé pour décompresser gzips, il descend par défaut dans les sous-répertoires. Affiche également les noms de fichiers par défaut (votre -Hoption).

PS Grâce à votre question, j'ai découvert cet outil aujourd'hui. En plus de la fonctionnalité dont vous avez besoin, j’ai une accélération 5x de certains journaux de production par rapport à zgrep.

Wojciech Kaczmarek
la source