Heim >Backend-Entwicklung >PHP-Tutorial >Linux-Tipps: Der schnellste Weg, eine Million Dateien auf einmal zu löschen
Erste Überprüfung
Gestern habe ich eine sehr interessante Methode zum Löschen einer großen Anzahl von Dateien in einem Verzeichnis gesehen. Diese Methode stammt von Zhenyu Lee in http://www.quora.com/How-can-someone-rapidly-delete-400-000-files.
Er nutzte weder find noch xargs, sondern nutzte kreativ die leistungsstarken Funktionen von rsync und verwendete rsync –delete, um den Zielordner durch einen leeren Ordner zu ersetzen. Anschließend habe ich ein Experiment durchgeführt, um die verschiedenen Methoden zu vergleichen. Zu meiner Überraschung war Lees Methode viel schneller als die anderen. Unten ist meine Rezension.
Umgebung:
CPU: Intel(R) Core(TM)2 Duo CPU E8400 bei 3,00 GHz
MEM: 4G
HD: ST3250318AS: 250G/7200RPM
Methode
Anzahl der Dateien
Löschzeit
rsync -a –löschen empty/ s1/ 1000000 6m50.638s
find s2/ -type f -delete 1000000 87m38.826s
find s3/ -type f |. 000000 83m36.851s
find s4/ -type f |. xargs -L 100 -P 100 rm 1000000 78m4.658s –delete und –exclude, Sie können Dateien selektiv löschen, die die Kriterien erfüllen. Ein weiterer Punkt ist, dass diese Methode perfekt ist, wenn Sie dieses Verzeichnis für andere Zwecke behalten müssen.
Neubewertung
Vor ein paar Tagen antwortete Keith-Winstein auf diesen Beitrag auf Quora und sagte, dass meine vorherige Bewertung nicht kopiert werden könne, da die Operation zu lange gedauert habe. Nur zur Klarstellung: Diese Zahlen sind zu groß, wahrscheinlich weil mein Computer in den letzten Jahren so viel getan hat, und es im Test möglicherweise einige Dateisystemfehler gegeben hat. Aber ich bin mir nicht sicher, ob das die Gründe sind. Nun, ich habe einen Tag mit einem neueren Computer verbracht und den Test noch einmal gemacht. Dieses Mal habe ich /usr/bin/time verwendet, das detailliertere Informationen liefert. Nachfolgend finden Sie die neuen Ergebnisse.
(Jedes Mal gibt es 1.000.000 Dateien. Die Größe jeder Datei beträgt 0.)
Befehl
Abgelaufen
System Zeit
%CPU
cs (Vol/Invol)
rsync -a –delete empty/ a 10,60 1,31 95 106/22
find b/ -type f -delete 28.51 14.46 52 14849/11
finde c/ -type f | / -type f |