Risposte:
Mi piace usare tmpwatch
per queste cose, questa è l'ultima volta che il file è stato modificato. È semplice e funziona bene in molti casi:
tmpwatch -m 720 /path/to/cache
Per Ubuntu, controlla tmpreaper
invece.
Se si desidera verificare l'ultima volta che è stato effettuato l'accesso al file, utilizzare quanto segue:
tmpwatch -a 720 /path/to/cache
Non è possibile utilizzare tmpwatch -a su file system montati con noatime. puoi ancora usare -m
Ubuntu 10.04.2 LTS
e quel comando non esiste ..
tmpreaper
invece.
Prova a eseguire quanto sopra con nice:
nice -n 39 find cache* -mtime +30 -exec rm -f {} ';'
In questo modo il carico enorme apparirà solo se non è necessario eseguire nient'altro, altrimenti gli altri processi avranno la precedenza (se la loro gentilezza è inferiore a 19, cioè il massimo).
Si noti che l'argomento dell'opzione -n viene aggiunto alla gentilezza predefinita che varia tra -20 e 19. Ho usato 39 in modo che sia molto bello indipendentemente dalla gentilezza originale che c'era.
Come commentato da chiborg, il caricamento è dovuto all'avvio di rm per ogni file trovato. Ho notato la risposta in cui tmpwatch
viene suggerita un'alternativa, che sono sicuro che funziona bene. Tuttavia, non è necessario.
Trova può eseguire il comando dato a exec una volta, se gli dici di accumulare i file trovati in un elenco di argomenti in questo modo:
find /path -name "*.moo" -exec rm {} \+
Questo a volte potrebbe non funzionare perché l'elenco degli argomenti potrebbe diventare più grande (in byte) del massimo consentito dalla shell (getconf ARG_MAX). Questo può essere risolto da xargs con l'opzione -L.
considera questo esempio:
$ echo 0 > /tmp/it;
$ for i in {0..15000};do echo $i;done |\
xargs --no-run-if-empty -L 5000 ./tmp/xr.sh
Iteration=0; running with 5000 arguments
Iteration=1; running with 5000 arguments
Iteration=2; running with 5000 arguments
Iteration=3; running with 1 arguments
$ cat tmp/xr.sh
#!/bin/sh
IT=`cat /tmp/it`
echo Iteration=$IT\; running with $# arguments
let IT=IT+1
echo $IT > /tmp/it
Quindi non è necessario installare software extra, tutto ciò che serve è in gnu-findutils:
find /path -mtime +30 -print0 | xargs -0 -L 5000 rm
\+
; la pianura +
è abbastanza buona. (2) Questo non "non funzionerà perché l'elenco degli argomenti potrebbe ingrandirsi ...". find … -exec … {} +
farà la stessa cosa che xargs
farà; eseguirà il comando tutte le volte che è necessario. Ad esempio (come nel tuo esempio), se hai tra 15001 e 20000 file, find
eseguiresti il -exec
programma 'd ( rm
) quattro volte.
cache*
espande in molti file, ti consigliamo di provare qualcosa di similefind . -name 'cache*' -mtime +30 -exec rm {} \;
.