Ich habe mich gefragt, ob es eine Möglichkeit gibt, eine Art Fortschrittsinformation anzuzeigen, wenn ich unter Linux nach Dateien suche find
. Ich bin oft auf der Suche nach Dateien auf einer großen Festplatte und eine Art Fortschrittsanzeige wäre sehr hilfreich, wie eine Leiste oder zumindest das aktuelle Verzeichnis, in dem "gesucht" wird. Gibt es Skripte, die das tun oder die find
einige Hooks unterstützen? ?
24
Antworten:
mit diesem trick siehst du den aktuellen ordner - aber keinen fortschrittsbalken - sorry.
quelle
Ein kleines Hilfsprogramm namens pv (pipe viewer) kann helfen. Aus der fantastischen Zusammenfassung von Peteris Krumins:
Pipe Viewer ist ein terminalbasiertes Tool zur Überwachung des Datenfortschritts über eine Pipeline.
Sie können pv auf verschiedene Arten verwenden. Wenn ich hier herumspiele, setze ich es direkt hinter eine Pipe, um den Fortschritt der von find erzeugten Ausgabe zu überwachen (sollte stdin an stdout unberührt übergeben).
Die Ausgabe sieht dann ungefähr so aus:
(Ich habe stdout nach / dev / null umgeleitet, damit ich den Fortschrittsbalken in Aktion sehen kann, ohne dass die Ausgabe vorbei fliegt. Dies ist wahrscheinlich nicht Ihre Absicht mit find, also passen Sie es entsprechend an.)
Ich bin mir ehrlich gesagt nicht sicher, wie gut das in freier Wildbahn funktioniert. Bei "teuren" Fundstücken wie dem oben beschriebenen (von der Wurzel ausgehend) schien es ziemlich gut zu funktionieren. Für einfachere Befehle in einem tieferen Knoten im Verzeichnisbaum ist pv kläglich fehlgeschlagen. Diese Befehle liefern sofort Ergebnisse, daher wird hier wahrscheinlich eine Fortschrittsanzeige angezeigt.
Spielen Sie auf jeden Fall herum und sehen Sie, ob dies überhaupt für das funktioniert, was Sie brauchen. Zumindest Denkanstöße.
quelle
find
nochpv
wie lange die Suche dauern wird, so dass sie den Prozentsatz nicht berechnen können. In derpv
Ausgabe sehen wir nur die Zeit seit Beginn der Suche.yes | pv > /dev/null
zu beobachtenIch habe heute danach gesucht und bin über Google hierher gekommen. Ich hatte einen langjährigen Fund, der unter OS X lief und anscheinend
watch
dort nicht existiert. Also hier ist eine andere Lösung:lsof -Fn -a -c find -d cwd +r 10
lsof
= Liste der geöffneten Dateien-Fn
= Zeigen Sie einfach den Namen der Datei / des Verzeichnisses an (mit dem Präfix 'n'). Überspringen Sie diesen Befehl, wenn Sie die vollständigelsof
Ausgabe bevorzugen-a
= saglsof
, dass nur Zeilen angezeigt werden sollen, die allen Kriterien entsprechen (standardmäßig werden Zeilen angezeigt, die allen Kriterien entsprechen)-c find
= Show Dateien / Verzeichnisse , die durch Prozess namens geöffnetfind
(eigentlich Prozess , dessen Name beginnt mitfind
, aber es ist Groß- und soFinder
wird nicht angezeigt )-d cwd
= zeige Zeilen mit FD (filedescriptor) cwd (aktuelles Arbeitsverzeichnis)+r 10
= Ausgabe alle 10 Sekunden anzeigen, bis keine offenen Dateien mehr gefunden werden (Suche beendet)Dies zeigt an, dass das Verzeichnis
find
alle 10 Sekunden verarbeitet wird. Es sollte also eine Vorstellung davon geben, obfind
es noch funktioniert und wie weit es fortgeschritten ist.quelle
Es gibt ein Beispiel für eine parallele Suche mit
find
inman find
. Mit dieser Option können Sie mehrere Überprüfungen für jedes Element durchführen und abhängig von der jeweiligen Bedingung mehrere Aktionen ausführen. Die erste Prüfung kann beispielsweise einfach sein-print
, sodass alle Namen auf stdout gedruckt werden. Die zweite Überprüfung wird tun, was Sie wollen. So etwas wie:find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)
Wenn bei der zweiten Überprüfung auch die Dateinamen angezeigt werden sollen, können Sie einen von ihnen mit stderr umleiten
-fprint /dev/stderr
.quelle
AFAIK tut es nicht, und die Implementierung wäre nicht trivial.
... Hmm. Vielleicht ein Skript, das
find <target dir> -type d
zuerst ausgeführt wird, die Liste speichert und dann jedes Verzeichnis wiederholt, bevorfind <list item> -maxdepth 1 <rest of find parameters>
eine for-Schleife ausgeführt wird.Beachten Sie, dass Sie einen / signifikanten / Leistungsverlust eintauschen, um vage zu sehen, was er tut.
quelle
Dies ist eine Liste der aktuellen Dateien geöffnet finden , so ist es das gleiche, was finden sucht ‚jetzt‘.
Es ist so einfach wie die Abfrage der Adresse von Dateideskriptoren, die von find jede Sekunde verwendet werden , und greift nicht in find selbst ein. Sie können es auch mit jedem beliebigen Programm tun.
Das
grep -v /dev/
ist zu verbergen Dateien STDOUT, STDIN und STDERR, die Dateien werden verwendet , um Daten zu empfangen und auf der Konsole zu drucken.quelle