Eu tenho um diretório enorme no meu computador e preciso pesquisar em cada arquivo ruby dentro de uma string.
Eu poderia ter feito assim: grep -R "string" *.rb
mas leva muito tempo e eu gostaria de usar o pv (pipe viewer) para mostrar uma barra de progresso para poder monitorar o grep
progresso.
Mas eu realmente não sei como escrever este comando, porque ainda existem algumas coisas que simplesmente não consigo entender sobre esse comando.
Alguém tem alguma ideia?
Mais dois métodos:
Ou, em um shell diferente enquanto o comando original estiver em execução, encontre o pid do comando grep e, em seguida:
Ambas as opções acima mostrarão em qual arquivo o comando grep está trabalhando atualmente. Você pode encontrar o número total de arquivos com:
Por fim, use isso para descobrir qual número o arquivo atual está na lista:
PS Minhas respostas assumem que todos os seus arquivos estão em um único diretório. Se não estiverem, você terá que usar
find
em vez dels
e*.rb
como thinice sugeriu.fonte
Não tenho certeza de qual SO você está usando, mas
grep -R "string" *.ext
pode não estar funcionando corretamente para você.Você pode ser melhor atendido usando
find
em conjunto comgrep
:find . -type f -name "*.rb" -print0 |xargs --null grep "string"
fonte
Nas versões recentes do,
pv
existe uma opção"-d"
para assistir a todos os DFs de outro processo.Portanto, em teoria
pv
, não funcionará apenas como um tubo, mas também como um indicador de progresso para todo o processo. (Por exemplo, tente com o PID do seu Firefox)Para o problema acima, uma idéia mais simples é a seguinte: Enquanto o
grep
estiver em execução, uselsof
junto comwatch
.Dessa forma, você pode monitorar o progresso do seu grep.
fonte
Você já tentou
Não sei se ele realmente funciona porque não sabe quantos bits do total de dados procurar porque é recursivo?
fonte
pv
estará operando na saída do grep (portanto, mesmo se ele especificou o tamanho total da entrada,pv
apenas vê a saída saindo pelo final do pipe - seria muito mais sobEu costumo usar o sistema de arquivos proc em sistemas Linux, ou seja,
ls -al /proc/<pid of grep>/fd
Isso lista todos os arquivos que a chamada grep abriu atualmente e, portanto, dá uma impressão de onde está atualmente a pesquisa.
fonte