GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Milliarden von Dateien aus einem Verzeichnis löschen und gleichzeitig den Fortschritt sehen?

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 einfach 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 ist.

Akzeptierte Antwort:

Sie können rm -v verwenden rm haben drucke eine Zeile pro gelöschter Datei. Auf diese Weise können Sie diesen rm sehen arbeitet tatsächlich daran, Dateien zu löschen. Aber wenn Sie Milliarden von Dateien haben, dann sehen Sie nur diesen rm arbeitet noch. 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 Fortschrittsschätzung helfen.

http://www.ivarch.com/programs/pv.shtml

So würden Sie rm aufrufen mit pv mit Beispielausgabe

$ rm -rv dirname | pv -l -s 1000 > logfile
562  0:00:07 [79,8 /s] [====================>                 ] 56% ETA 0:00:05

In diesem erfundenen Beispiel habe ich pv gesagt dass es 1000 gibt Dateien. Die Ausgabe von pv zeigt, dass 562 bereits gelöscht wurden, die verstrichene Zeit 7 Sekunden beträgt und die Schätzung bis zum Abschluss in 5 Sekunden liegt.

Einige Erklärungen:

  • pv -l macht pv mit Zeilenumbrüchen statt mit Bytes zu zählen
  • pv -s number sagt pv was die Summe ist, damit Sie eine Schätzung erhalten können.
  • Die Weiterleitung zur logfile am Ende ist für saubere Ausgabe. Ansonsten die Statuszeile von pv mit der Ausgabe von rm -v verwechselt wird . Bonus:Sie erhalten eine Protokolldatei darüber, was gelöscht wurde. Aber Vorsicht, die Datei wird riesig. Sie können auch zu /dev/null umleiten wenn Sie kein Protokoll benötigen.

Um die Anzahl der Dateien zu erhalten, können Sie diesen Befehl verwenden:

$ find dirname | wc -l

Auch dies kann sehr lange dauern, wenn es sich um Milliarden von Dateien handelt. Sie können pv verwenden auch hier, um zu sehen, wie viel es gezählt hat

$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [     <=>                                              ]
278044

Hier heißt es, dass es 4 Sekunden gedauert hat, 278.000 Dateien zu zählen. Die genaue Anzahl am Ende (278044 ) ist die Ausgabe von wc -l .

Wenn Sie nicht auf das Zählen warten möchten, können Sie entweder die Anzahl der Dateien erraten oder pv verwenden ohne Schätzung:

$ rm -rv dirname | pv -l > logfile

So haben Sie keine Schätzung mehr, aber zumindest sehen Sie, wie viele Dateien bereits gelöscht wurden. Weiterleitung nach /dev/null wenn Sie die Logdatei nicht benötigen.

Verwandte:Wie fügt man Daten an den Puffer im Shell-Skript an?

Nitpick:

  • brauchen Sie wirklich sudo ?
  • normalerweise rm -r reicht aus, um rekursiv zu löschen. keine Notwendigkeit für rm -f .

Linux
  1. Wie verwende ich Wget, um rekursiv Dateien aus einem Webverzeichnis herunterzuladen?

  2. Was ist der beste Weg, um die Anzahl der Dateien in einem Verzeichnis zu zählen?

  3. Untersuchen von Berkeley-DB-Dateien über die CLI

  4. Zählen der Anzahl der Dateien in einem Verzeichnis mit C

  5. Dateien komprimieren, während Daten von STDIN gelesen werden

So suchen Sie Dateien im Terminal unter Linux

So schließen Sie ein Verzeichnis beim Suchen von Dateien in Linux aus

Migrieren eines Linux-Servers über die Befehlszeile

So identifizieren Sie Benutzer, die Dateien aus einem bestimmten Verzeichnis in Linux löschen

Sicherstellen, dass neue Dateien in einem Verzeichnis zur Gruppe gehören

Wie erhalte ich die tatsächliche Verzeichnisgröße (aus du)?