web-dev-qa-db-fra.com

Barre de progression Grep à l'aide de PV (Viewer de tuyau)

J'ai un énorme répertoire sur mon ordinateur et j'ai besoin de rechercher dans tous Ruby fichier à l'intérieur d'une chaîne.

J'aurais pu le faire comme ceci: grep -R "string" *.rb Mais cela prend vraiment longtemps et j'aimerais utiliser PV (Viewer de la pipe) pour montrer une barre de progression pour pouvoir surveiller grep progrès.

Mais je ne sais pas vraiment comment puis-je écrire cette commande car il y a encore des choses que je ne peux tout simplement pas comprendre à propos de cette commande.

Quelqu'un a-t-il eu une idée?

11
Cydonia7

Deux autres méthodes:

for file in *.rb; do echo $file; grep "string" $file >> output.txt; done

Ou, dans une coque différente, lorsque votre commande d'origine est en cours d'exécution, trouvez le PID de la commande GREP puis:

strace -q -s 256 -e trace=open -p [pid] 2>&1 | head

Les deux ci-dessus vous montreront quel fichier le commandement GREP fonctionne actuellement. Vous pouvez trouver le nombre total de fichiers avec:

ls -l *.rb | wc -l

Enfin, utilisez ceci pour déterminer quel numéro le fichier actuel figure dans la liste:

ls -l *.rb | grep -n [the current filename]

P.s. Mes réponses supposent que tous vos fichiers sont dans un répertoire unique. S'ils ne le sont pas, vous devrez utiliser find au lieu de ls et *.rb comme la finesse suggérée.

4
Ladadadada

Je ne sais pas dans quel système d'exploitation que vous utilisez, mais grep -R "string" *.ext Peut ne pas fonctionner correctement pour vous.

Vous pourriez être mieux servi en utilisant find en conjonction avec grep:

find . -type f -name "*.rb" -print0 |xargs --null grep "string"

1
thinice

J'utilise habituellement le système Proc-FileSystem sur les systèmes Linux, c'est-à-dire.

ls -al /proc/<pid of grep>/fd

Cela répertorie tous les fichiers que l'invocation Grep est ouverte actuellement et donne ainsi une impression de l'endroit où elle est actuellement.

0
centic

Avez-vous déjà essayé

grep -R "string" *.rb | pv

Je ne sais pas s'il travaille en fait parce qu'il ne sait pas combien de bits de données totales à rechercher car il est récursif?

0
nhutto