web-dev-qa-db-fra.com

Comment utiliser efficacement grep?

J'ai un grand nombre de petits fichiers à rechercher. Je cherchais une bonne version multi-thread de facto de grep mais je n'ai rien trouvé. Comment puis-je améliorer mon utilisation de grep? À partir de maintenant, je fais ceci:

grep -R "string" >> Strings
40
Legend

Si vous avez des xargs installés sur un processeur multicœur, vous pouvez bénéficier des avantages suivants au cas où quelqu'un serait intéressé.

Environnement:

Processor: Dual Quad-core 2.4GHz
Memory: 32 GB
Number of files: 584450
Total Size: ~ 35 GB

Tests:

1. Trouvez les fichiers nécessaires, dirigez-les vers xargs et dites-lui d'exécuter 8 instances.

time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P8 grep -H "string" >> Strings_find8

real    3m24.358s
user    1m27.654s
sys     9m40.316s

2. Trouvez les fichiers nécessaires, dirigez-les vers xargs et dites-lui d'exécuter 4 instances.

time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P4 grep -H "string" >> Strings

real    16m3.051s
user    0m56.012s
sys     8m42.540s

. Suggéré par @Stephen: Trouvez les fichiers nécessaires et utilisez + au lieu de xargs

time find ./ -name "*.ext" -exec grep -H "string" {} \+ >> Strings

real    53m45.438s
user    0m5.829s
sys     0m40.778s

4. Grep récursif régulier.

grep -R "string" >> Strings

real    235m12.823s
user    38m57.763s
sys     38m8.301s

Pour mes besoins, la première commande a très bien fonctionné.

81
Legend

Vous vous demandez pourquoi -n1 est utilisé ci-dessous, ne sera-t-il pas plus rapide d'utiliser une valeur plus élevée (dites -n8? ou laissez-la de côté pour que xargs fasse la bonne chose)?

xargs -0 -n1 -P8 grep -H "string"

Semble qu'il sera plus efficace de donner à chaque grep qui est bifurqué de traiter sur plus d'un fichier (je suppose que -n1 ne donnera qu'un seul nom de fichier en argv pour le grep) - comme je le vois, nous devrions être en mesure de donner le n le plus élevé possible sur le système (basé sur argc/argv limitation de longueur max.). Ainsi, le coût d'installation de la mise en place d'un nouveau processus grep n'est pas encouru plus souvent.

4
Karthik Gurusamy