Ich habe ein Verzeichnis von 30 TB mit Milliarden von Dateien, die formal alle JPEG-Dateien sind. Ich lösche jeden Ordner mit Dateien wie folgt:
sudo rm -rf bolands-mills-mhcptz
Dieser Befehl wird nur ausgeführt und zeigt nichts an, ob er funktioniert oder nicht.
Ich möchte sehen, wie Dateien gelöscht werden oder wie der aktuelle Status des Befehls lautet.
rm
progress-information
Junaid Farooq
quelle
quelle
rm -ri
. Es wird Spaß machen!Antworten:
Sie können verwenden
rm -v
habenrm
eine Zeile gedruckt werden pro Datei gelöscht. Auf diese Weise können Sie sehen, dassrm
das Löschen von Dateien tatsächlich funktioniert. Aber wenn Sie Milliarden von Dateien haben, ist alles, was Sie sehen werden, dassrm
es noch funktioniert. Sie werden keine Ahnung haben, wie viele Dateien bereits gelöscht wurden und wie viele noch übrig sind.Das Tool
pv
kann Ihnen bei einer Fortschrittsabschätzung helfen.http://www.ivarch.com/programs/pv.shtml
Hier ist , wie Sie aufrufen würde
rm
mitpv
mit BeispielausgabeIn diesem erfundenen Beispiel habe ich gesagt,
pv
dass es1000
Dateien gibt. Die Ausgabe vonpv
zeigt, dass 562 bereits gelöscht wurden, die verstrichene Zeit 7 Sekunden beträgt und die Schätzung für den Abschluss 5 Sekunden beträgt.Einige Erklärungen:
pv -l
machtpv
durch Zeilenumbrüche statt Bytes zu zählenpv -s number
gibt an, wiepv
hoch die Gesamtsumme ist, damit Sie eine Schätzung erhalten.logfile
am Ende dient der sauberen Ausgabe. Andernfalls wird die Statuszeile vonpv
mit der Ausgabe von verwechseltrm -v
. Bonus: Sie erhalten eine Protokolldatei von dem, was gelöscht wurde. Aber Vorsicht, die Datei wird riesig. Sie können auch weiterleiten,/dev/null
wenn Sie kein Protokoll benötigen.Um die Anzahl der Dateien zu ermitteln, können Sie diesen Befehl verwenden:
Dies kann auch bei Milliarden von Dateien sehr lange dauern. Sie können auch
pv
hier sehen, wie viel es gezählt hatHier heißt es, dass es 4 Sekunden gedauert hat, bis 278k Dateien gezählt wurden. Die genaue Anzahl am Ende (
278044
) ist die Ausgabe vonwc -l
.Wenn Sie nicht auf die Zählung warten möchten, können Sie entweder die Anzahl der Dateien erraten oder
pv
ohne Schätzung verwenden:Auf diese Weise haben Sie keine Schätzung für den Abschluss, aber Sie werden zumindest sehen, wie viele Dateien bereits gelöscht wurden. Weiterleiten an,
/dev/null
wenn Sie die Protokolldatei nicht benötigen.Nitpick:
sudo
?rm -r
es aus, rekursiv zu löschen. keine Notwendigkeit fürrm -f
.quelle
pv
, vorausgesetzt, es ist nicht zu teuer, die Milliarden von Dateien zu zählen ;-). (Es könnte fast so lange dauern, wierm
es messen soll!)pv
der Fortschrittsbalken wird trotz Eingabe nur einmal pro Sekunde aktualisiert. Das Terminal muss also nur eine Zeile anstatt einer Tonne pro Sekunde anzeigen.pv
Es muss nur ein Zähler für jede neue Zeile erhöht werden, auf die es stößt. Das muss schneller sein als Zeilenumbrüche, und was auch immer, um eine Zeile in einem Terminal anzuzeigen. Ich denke, dass das Laufen mitpv
so etwas dazu führt, dass das Entfernen von Dateien schneller als einfach istrm -rv
.rm -rv dirname | pv -l -s $(find dirname | wc -l) > logfile
Schauen Sie sich die Antwort von Lesmana an , sie ist viel besser als meine - besonders das letzte
pv
Beispiel, das nicht viel länger dauert als die ursprüngliche Stille,rm
wenn Sie/dev/null
anstelle von angebenlogfile
.Vorausgesetzt, Sie
rm
unterstützen die Option (wahrscheinlich, weil Sie Linux verwenden), können Sie sie im ausführlichen Modus ausführen mit-v
:Wie von einer Reihe von Kommentatoren herausgestellt wurde, kann dies aufgrund der vom Terminal erzeugten und angezeigten Ausgabemenge sehr langsam sein. Sie können die Ausgabe stattdessen in eine Datei umleiten:
und beobachte die Größe von
rm-trace.txt
.quelle
Eine andere Möglichkeit besteht darin, zu beobachten, wie die Anzahl der Dateien im Dateisystem abnimmt. Führen Sie in einem anderen Terminal Folgendes aus:
Die Anzahl der verwendeten Inodes nimmt mit zunehmendem
rm
Fortschritt ab. (Es sei denn, die Dateien hatten meist mehrere Links, zB wenn der Baum mit erstellt wurdecp -al
). Hiermit wird der Löschfortschritt in Bezug auf die Anzahl der Dateien (und Verzeichnisse) verfolgt.df
ohne-i
wird in Bezug auf den genutzten Platz nachverfolgt.Sie können auch
iostat -x 4
E / A-Vorgänge pro Sekunde anzeigen (sowie kiB / s, dies ist jedoch für reine Metadaten-E / A nicht sehr relevant).Wenn Sie neugierig werden, an welchen Dateien
rm
gerade gearbeitet wird, können Sie eine anhängenstrace
und beobachten, wie dieunlink()
Systemaufrufe (und getdents) auf Ihrem Terminal ausgelöst werden. zBsudo strace -p $(pidof rm)
. Sie können sich von^c
der Straße lösen,rm
ohne sie zu unterbrechen.Ich vergesse, wenn das
rm -r
Verzeichnis in dem Baum geändert wird, der gelöscht wird. wenn ja könntest du dir anschauen/proc/<PID>/cwd
. Seine/proc/<PID>/fd
Macht hat oft ein Verzeichnis fd geöffnet, so dass Sie sich darum kümmern könnten , um zu sehen , was Ihrrm
Prozess zur Zeit betrachtet.quelle
df -ih
ist in der Tat eine schöne billige Möglichkeit, denrm
Fortschritt zu beobachten ./boot
EFI-Systempartition.Während die obigen Antworten alle verwenden
rm
,rm
kann das Löschen einer großen Anzahl von Dateien tatsächlich ziemlich langsam sein, wie ich kürzlich beim Extrahieren von ~ 100K-Dateien aus einem .tar-Archiv festgestellt habe, dass das Löschen tatsächlich weniger Zeit in Anspruch nahm als das Löschen. Obwohl dies die von Ihnen gestellte Frage nicht beantwortet, besteht eine bessere Lösung für Ihr Problem möglicherweise darin, eine andere Methode zum Löschen Ihrer Dateien zu verwenden, z. B. eine der aktualisierten Antworten auf diese Frage .Meine persönliche Lieblingsmethode ist zu verwenden
rsync -a --delete
. Ich bin der Meinung , dass diese Methode schnell genug ist, um die einfachste und am besten bewertete Antwort auf die Frage zu finden , in der der Autor ein C-Programm geschrieben hat, das Sie kompilieren müssten. (Beachten Sie, dass dadurch jede zu verarbeitende Datei ähnlich wie in stdout ausgegeben wirdrm -rv
. Dies kann den Prozess überraschend verlangsamen. Wenn Sie diese Ausgabe nicht möchten, verwenden Siersync -aq --delete
stattdessen die Ausgabe oder leiten Sie sie in eine Datei um.)Der Autor dieser Antwort sagt:
Ich habe festgestellt, dass dies für meine Zwecke gut genug ist. Auch potenziell wichtig aus dieser Antwort, zumindest wenn Sie ext4 verwenden:
quelle
rm
und / oderfind --delete
effizient zu sein. Interessanter Punkt zum Löschen in Sortierreihenfolge, um B-Tree-Neuverteilungen beim Löschen zu vermeiden. Nicht sicher, wie viel davon auf andere Dateisysteme zutrifft. XFS eignet sich auch nicht für Millionen von Dateien pro Verzeichnis. IDK über BTRFS, aber ich habe den Eindruck, dass es für so etwas gut sein könnte.Eine Möglichkeit wäre, den
rm
Prozess im Hintergrund zu starten (ohne Ausgabe, damit er nicht verlangsamt wird) und ihn dann im Vordergrund mit einem einfachen Befehl (a) zu überwachen :Die
find/wc
Kombination kann durch ein beliebiges Werkzeug ersetzt werden, mit dem Sie die gewünschten Einheiten erhalten.(a) Naja, relativ einfach im Vergleich zur Kernphysik, der Riemann-Hypothese oder was ich meiner Frau für Weihnachten kaufen soll :-)
quelle
Vor einiger Zeit habe ich etwas geschrieben, um die Rate zu drucken, mit der Zeilen gedruckt wurden. Du kannst rennen
rm -rfv | ./counter
und es werden Zeilen pro Sekunde / Minute gedruckt. Obwohl dies kein direkter Fortschritt ist, gibt es Ihnen ein Feedback zur Fortschrittsrate, vielleicht ist esrm
in ein Netzwerk-Dateisystem gewandert oder ähnliches?Der Link zum Code ist hier:
http://www.usenix.org.uk/code/counter-0.01.tar.gz
quelle