Ich habe ein riesiges Verzeichnis auf meinem Computer und muss in jeder Ruby-Datei nach einer Zeichenfolge suchen.
Ich hätte es so machen können: grep -R "string" *.rb
aber es dauert sehr lange und ich würde gerne pv (Pipe Viewer) verwenden, um einen Fortschrittsbalken anzuzeigen, um den grep
Fortschritt überwachen zu können .
Aber ich weiß nicht wirklich, wie ich diesen Befehl schreiben kann, da es noch einige Dinge gibt, die ich über diesen Befehl einfach nicht verstehen kann.
Hat jemand eine Idee?
Zwei weitere Methoden:
Oder suchen Sie in einer anderen Shell, während Ihr ursprünglicher Befehl ausgeführt wird, die PID des Befehls grep und dann:
Beide oben genannten zeigen Ihnen, an welcher Datei der Befehl grep gerade arbeitet. Sie finden die Gesamtzahl der Dateien mit:
Verwenden Sie diese Option, um herauszufinden, welche Nummer die aktuelle Datei in der Liste enthält:
PS Meine Antworten gehen davon aus, dass sich alle Ihre Dateien in einem einzigen Verzeichnis befinden. Wenn dies nicht
find
der Fall ist , müssen Sie anstelle vonls
und*.rb
wie vorgeschlagen dünn verwenden.quelle
Ich bin nicht sicher, welches Betriebssystem Sie verwenden, aber
grep -R "string" *.ext
möglicherweise funktioniert es nicht richtig für Sie.Sie könnten besser bedient werden
find
in Verbindung mitgrep
:find . -type f -name "*.rb" -print0 |xargs --null grep "string"
quelle
In neueren Versionen von
pv
gibt es eine"-d"
Option, um alle FDs eines anderen Prozesses zu überwachen.Theoretisch
pv
funktioniert dies also nicht nur als Pipe, sondern auch als Fortschrittsindikator für einen gesamten Prozess. (Versuchen Sie es beispielsweise mit der PID Ihres Firefox.)Für das obige Problem ist die folgende Idee einfacher:
grep
Verwenden Sielsof
zusammen mitwatch
.Auf diese Weise können Sie den Fortschritt Ihres Grep überwachen.
quelle
Hast du es schon versucht
Ich weiß nicht, ob es tatsächlich funktioniert, weil es nicht weiß, wie viele Bits der Gesamtdaten durchsucht werden sollen, weil es rekursiv ist.
quelle
pv
wird mit der Ausgabe des grep arbeiten (selbst wenn er die volle Eingabegröße spezifiziert,pv
sieht die Ausgabe nur das Ende der Pipe - es wäre weit darunter -Zählen von Bytes.Ich benutze normalerweise das proc-Dateisystem auf Linux-Systemen, dh
ls -al /proc/<pid of grep>/fd
Dies listet alle Dateien auf, die der grep-Aufruf derzeit geöffnet hat, und gibt somit einen Eindruck davon, wo er sich in der Suche gerade befindet.
quelle