Lösung 1:
mit diesem trick sieht man zwar den aktuellen ordner - aber keinen fortschrittsbalken - sorry.
watch readlink -f /proc/$(pidof find)/cwd
Lösung 2:
Ein kleines Dienstprogramm namens pv (Pipe Viewer) darf Hilfe. Aus der fantastischen Zusammenfassung von Peteris Krumins:
Pipe Viewer ist ein Terminal-basiertes Tool zum Überwachen des Fortschritts von Daten durch eine Pipeline.
Sie können pv auf verschiedene Arten verwenden. Wenn ich hier herumspiele, setze ich es direkt nach einer Pipe, um den Fortschritt der von find generierten Ausgabe zu überwachen (sollte stdin unverändert an stdout übergeben)
find / -mtime -1h | pv > /dev/null
was die Ausgabe ungefähr so zeigt:
6.42MB 0:01:25 [31.7kB/s] [ <=> ]
(Ich habe stdout nach /dev/null umgeleitet, damit ich den Fortschrittsbalken in Aktion sehen kann, ohne dass die Ausgabe vorbeifliegt. 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. Für "teure" Funde wie den obigen (Traversing from root) schien es ziemlich gut zu funktionieren. Bei einfacheren Befehlen in einem tieferen Knoten im Verzeichnisbaum scheiterte pv kläglich. Diese Befehle geben sofort Ergebnisse zurück, daher ist ein Fortschrittsbalken hier wahrscheinlich strittig.
Spielen Sie auf jeden Fall herum und sehen Sie, ob dies überhaupt für das funktioniert, was Sie brauchen. Zumindest ein Denkanstoß.
Lösung 3:
Ich habe heute danach gesucht und bin über Google hier gelandet. Ich hatte einen lang andauernden Fund, der unter OS X ausgeführt wurde, und anscheinend watch
gibt es dort nicht. Also hier ist eine andere Lösung:
lsof -Fn -a -c find -d cwd +r 10
lsof
=Liste der geöffneten Dateien-Fn
=nur den Namen der Datei/des Verzeichnisses anzeigen (mit vorangestelltem 'n'-Zeichen, überspringen Sie dies, wenn Sie den vollständigenlsof
bevorzugen Ausgabe-a
=sagelsof
um nur Zeilen anzuzeigen, die mit all übereinstimmen Kriterien (standardmäßig werden Zeilen angezeigt, die mit beliebigen übereinstimmen Kriterien)-c find
=Dateien/Verzeichnisse anzeigen, die vom Prozess namensfind
geöffnet wurden (eigentlich ein Prozess, dessen Name mitfind
beginnt , aber es wird zwischen Groß- und Kleinschreibung unterschieden, alsoFinder
wird nicht angezeigt)-d cwd
=Zeilen mit FD (Dateideskriptor) cwd (aktuelles Arbeitsverzeichnis) anzeigen+r 10
=Ausgabe alle 10 Sekunden anzeigen, bis keine offenen Dateien mehr gefunden werden (Find ist beendet)
Dadurch wird das Verzeichnis find
angezeigt wird alle 10 Sekunden verarbeitet, also sollte es eine Vorstellung davon geben, ob find
noch funktioniert und wie weit es fortgeschritten ist.
Lösung 4:
Es gibt ein Beispiel für parallele Suchen mit find
in man find
. Mit ihm können Sie mehrere Prüfungen für jedes Element durchführen und mehrere Aktionen ausführen, je nachdem, welche Bedingung funktioniert. Die erste Prüfung kann beispielsweise einfach sein-print
, sodass alle Namen auf stdout ausgegeben werden. Die zweite Überprüfung wird das tun, was Sie wollen. Etwas wie:
find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)
Wenn die zweite Prüfung auch Dateinamen anzeigen soll, können Sie einen davon mit -fprint /dev/stderr
auf stderr umleiten .
Lösung 5:
AFAIK, tut es nicht, und die Implementierung wäre nicht trivial.
... Hmm. Vielleicht ein Skript, das find <target dir> -type d
ausführt Zuerst die Liste speichern und dann jedes Verzeichnis ausgeben, bevor ein find <list item> -maxdepth 1 <rest of find parameters>
ausgeführt wird in einer for-Schleife.
Beachten Sie, dass Sie einen /signifikanten/ Leistungsverlust dafür eintauschen, dass Sie vage sehen können, was es tut.