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.