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?
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.
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"
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.
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?