find … -exec rm {} \; führt den rm aus Befehl für jede Datei. Obwohl das Starten eines neuen Prozesses ziemlich schnell geht, ist es immer noch viel langsamer als das bloße Löschen einer Datei.
find … -exec rm {} + würde rm aufrufen in Stapeln, was viel schneller ist:Sie zahlen die Kosten für die Ausführung von rm einmal pro Stapel, und jeder Stapel führt viele Löschungen durch.
Noch schneller ist es, rm nicht aufzurufen überhaupt. Die find Befehl unter Linux hat eine Aktion -delete um eine übereinstimmende Datei zu löschen.
find ./cache -type f -mtime +0.5 -delete
Wenn Sie jedoch Dateien mit einer solchen Geschwindigkeit produzieren, dass find … -exec rm {} \; nicht mithalten können, ist wahrscheinlich etwas mit Ihrem Setup nicht in Ordnung. Wenn cache Millionen von Dateien enthält, sollten Sie es für einen schnelleren Zugriff in Unterverzeichnisse aufteilen.
Versuchen Sie es mit xargs :
find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
Erklärung für @pradeepchhetri aktualisieren
Wenn Sie find verwenden mit -exec , jede Datei, die find gefunden wird rm aufrufen einmal. Wenn Sie also sehr viele Dateien gefunden haben, z. B. 10000 Dateien, haben Sie rm aufgerufen 10000 Mal.
xargs behandelt die Ausgabe von find als Befehlsargument zu rm , sodass xargs so viele Argumente wie rm bereitstellt sofort verarbeiten kann, also rm -f file1 file2 ... So macht es weniger Fork-Aufrufe, lässt das Programm schneller laufen.