Ich habe einen Cache-Ordner mit mindestens 15000 Dateien.
Ich habe es versucht:
find cache* -mtime +30 -exec rm {} \;
Aber das ließ meine Serverlast in den Himmel fliegen!
Gibt es eine schnellere / bessere Lösung?
Oder kann ich die Geschwindigkeit oder Iterationen dieses Befehls begrenzen ?
linux
ubuntu
command-line
find
Kristian
quelle
quelle
cache*
auf viele Dateien erweitert wird, können Siefind . -name 'cache*' -mtime +30 -exec rm {} \;
stattdessen etwas Ähnliches ausprobieren .Antworten:
Ich benutze es gerne
tmpwatch
für diese Dinge, dies ist das letzte Mal, dass die Datei geändert wurde. Es ist einfach und funktioniert in vielen Fällen gut:Überprüfen Sie
tmpreaper
stattdessen Ubuntu .Wenn Sie überprüfen möchten, wann das letzte Mal auf die Datei zugegriffen wurde, verwenden Sie Folgendes:
Sie können tmpwatch -a nicht auf Dateisystemen verwenden, die mit noatime gemountet wurden. Sie können immer noch -m verwenden
quelle
Ubuntu 10.04.2 LTS
und dieser Befehl existiert nicht ..tmpreaper
Stattdessen nach suchen .Sie können das Laichen eines neuen Prozesses für jede Datei mithilfe von vermeiden
quelle
Versuchen Sie, das oben genannte mit nice auszuführen:
Auf diese Weise wird die enorme Last nur angezeigt, wenn nichts anderes ausgeführt werden muss, andernfalls haben die anderen Prozesse Vorrang (wenn ihre Schönheit unter 19 liegt, dh maximal).
Beachten Sie, dass das Argument zur Option -n zu der Standard-Nizza hinzugefügt wird, die zwischen -20 und 19 variiert. Ich habe 39 verwendet, damit es sehr schön ist, unabhängig davon, welche ursprüngliche Nizza vorhanden war.
quelle
Wie von chiborg kommentiert, ist das Laden darauf zurückzuführen, dass rm für jede gefundene Datei gestartet wird. Ich bemerkte die Antwort, wo
tmpwatch
als Alternative vorgeschlagen wird, was sicher gut funktioniert. Dies ist jedoch nicht erforderlich.Find kann den Befehl, der an exec gegeben wurde, einmal ausführen, wenn Sie ihn anweisen, die gefundenen Dateien in einer Liste von Argumenten wie folgt zu akkumulieren:
Dies funktioniert manchmal nicht, da die Argumentliste möglicherweise größer (in Byte) wird als das von der Shell zugelassene Maximum (getconf ARG_MAX). Dies kann durch xargs mit der Option -L gelöst werden.
Betrachten Sie dieses Beispiel:
Sie müssen also keine zusätzliche Software installieren. Sie benötigen lediglich gnu-findutils:
quelle
\+
; schlicht+
ist gut genug. (2) Dies wird nicht "nicht funktionieren, weil die Argumentliste möglicherweise groß wird ...".find … -exec … {} +
wird das gleiche tun, wasxargs
tun wird; Der Befehl wird so oft ausgeführt, wie es erforderlich ist. Wenn Sie beispielsweise (wie in Ihrem Beispiel) zwischen 15001 und 20000 Dateien haben,find
wird das-exec
Programm 'd (rm
) viermal ausgeführt.