Mam ogromny katalog na swoim komputerze i muszę wyszukać w każdym pliku ruby ciąg znaków.
Mógłbym to zrobić w ten sposób: grep -R "string" *.rb
ale trwa to naprawdę długo i chciałbym użyć pv (podglądu rur), aby pokazać pasek postępu, aby móc monitorować grep
postęp.
Ale tak naprawdę nie wiem, jak napisać to polecenie, ponieważ wciąż jest kilka rzeczy, których po prostu nie rozumiem na temat tego polecenia.
Czy ktoś ma jakiś pomysł?
Dwie kolejne metody:
Lub, w innej powłoce, podczas gdy oryginalne polecenie jest uruchomione, znajdź pid polecenia grep, a następnie:
Oba powyższe pokażą, nad którym plikiem aktualnie pracuje polecenie grep. Możesz znaleźć łączną liczbę plików za pomocą:
Na koniec użyj tego, aby dowiedzieć się, jaki numer znajduje się na liście:
PS Moje odpowiedzi zakładają, że wszystkie twoje pliki są w jednym katalogu. Jeśli nie są, będziesz musiał użyć
find
zamiastls
i*.rb
jak sugeruje cienkość.źródło
Nie jestem pewien, jakiego systemu operacyjnego używasz, ale
grep -R "string" *.ext
może nie działać poprawnie.Możesz być lepiej obsługiwany
find
w połączeniu zgrep
:find . -type f -name "*.rb" -print0 |xargs --null grep "string"
źródło
W najnowszych wersjach
pv
istnieje"-d"
możliwość oglądania wszystkich FD innego procesu.Teoretycznie
pv
będzie więc działał nie tylko jako rura, ale także jako wskaźnik postępu dla całego procesu. (Na przykład spróbuj z PID przeglądarki Firefox)W przypadku powyższego problemu prostszym pomysłem jest: Podczas
grep
działania użyjlsof
razem zwatch
.W ten sposób możesz monitorować postęp swojego grep.
źródło
Już próbowałeś
Nie wiem, czy to faktycznie działa, ponieważ nie wie, ile bitów danych do przeszukania, ponieważ jest rekurencyjne?
źródło
pv
będzie działał na wyjściu grep (więc nawet jeśli określił pełny rozmiar wejścia,pv
widzi tylko wyjście wychodzące z końca potoku - Byłoby to znacznie poniżej -liczanie bajtówZwykle używam systemu plików proc w systemach Linux, tj
ls -al /proc/<pid of grep>/fd
Wyświetla listę wszystkich plików, które aktualnie otwarte jest wywołanie grep, a tym samym daje wrażenie, gdzie aktualnie jest wyszukiwane.
źródło