У меня есть огромный каталог на моем компьютере, и мне нужно искать строку в каждом рубиновом файле внутри.
Я мог бы сделать это так: grep -R "string" *.rb
но это занимает очень много времени, и я хотел бы использовать pv (pipe viewer), чтобы показать индикатор выполнения, чтобы иметь возможность отслеживать grep
прогресс.
Но я действительно не знаю, как я могу написать эту команду, потому что есть некоторые вещи, которые я просто не могу понять об этой команде.
У кого-нибудь есть идеи?
Еще два метода:
Или в другой оболочке во время выполнения исходной команды найдите pid команды grep и затем:
Оба вышеперечисленных покажут вам, над каким файлом работает команда grep. Вы можете найти общее количество файлов с:
Наконец, используйте это, чтобы выяснить, какой номер текущий файл в списке:
PS Мои ответы предполагают, что все ваши файлы находятся в одном каталоге. Если это не так, вам придется использовать
find
вместоls
и,*.rb
как предложено.источник
Я не уверен, какую операционную систему вы используете, но,
grep -R "string" *.ext
возможно, не работает правильно для вас.Вы могли бы лучше использовать, используя
find
в сочетании сgrep
:find . -type f -name "*.rb" -print0 |xargs --null grep "string"
источник
В последних версиях
pv
есть"-d"
опция просмотра всех FD другого процесса.Таким образом, в теории
pv
будет работать не только как труба, но и как индикатор прогресса для всего процесса. (Например, попробуйте это с PID вашего Firefox)Для описанной выше проблемы более простая идея заключается в следующем: во время
grep
работы используйтеlsof
вместе сwatch
.Таким образом, вы можете отслеживать прогресс вашего grep.
источник
Ты уже пробовал
Я не знаю, работает ли это на самом деле, потому что он не знает, сколько битов общих данных искать, потому что это рекурсивно?
источник
pv
будет работать на выходе Grep (так что даже если он указан полный размер входногоpv
только видит выход выходит конец трубы - это будет путь под -счет байтов.Я обычно использую proc-файловую систему в системах Linux, т.е.
ls -al /proc/<pid of grep>/fd
В этом списке перечислены все файлы, открытые в данный момент с помощью grep-invocation, и, таким образом, создается впечатление о том, где в поиске он находится в данный момент.
источник