web-dev-qa-db-fra.com

Zgrep récursif ne fonctionne pas

J'ai une hiérarchie de répertoires contenant de nombreux .gz des dossiers. Je veux pouvoir les grep récursivement 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 de résultats. Si je remplace le point avec le nom d'un fichier, cela fonctionne. Par exemple,

zgrep -R -H "foo" myFile.gz

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

Je connais "FOO" est dans certains des 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 de zgrep récursive ne fonctionne pas. Je suis sur une boîte Rhel Linux

10
Nosrettap

Votre presque là-bas. Essaye ça:

zgrep -R -H "foo" *.gz

EDIT: HMMMM .... Intriguant!

Selon mon zgrep, -r (récursif) n'est pas une option. Ce n'est tout simplement pas pris en charge. Vous avez un chèque pour voir ce que la page de votre homme de votre Zgrep dit.

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

zcat */*.gz | grep <needle>

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

4
GeoSword

Vous devez installer des zutils. Cela remplacera la valeur par défaut et limitée ZGREP sur votre système avec une capable récursive.

Sur les systèmes basés à Debian vous exécutez apt-get install zutils Ensuite vous pouvez zgrep -rH myword . et utiliser la plupart des autres paramètres de Grep, vous connaissez et aimez.

4
nzn

Utilisez SIFT - C'est Super-Fast .

sift -z foo

-z est pour déballer les gzips, il descend dans des sous-répertoires par défaut. Affiche les noms de fichiers également par défaut (votre -H option).

Ps. Grâce à votre question, j'ai découvert cet outil aujourd'hui. Il suffit de batitletsteté, mis à part la fonctionnalité dont vous avez besoin, j'ai une vitesse 5 fois sur certains journaux de production lorsque vous comparez à zgrep.

0
Wojciech Kaczmarek