Respostas:
Eu gosto de usar tmpwatch
para essas coisas, é a última vez que o arquivo foi modificado. É simples e funciona bem em muitos casos:
tmpwatch -m 720 /path/to/cache
Para o Ubuntu, verifique tmpreaper
.
Se você deseja verificar a última vez que o arquivo foi acessado, use o seguinte:
tmpwatch -a 720 /path/to/cache
Você não pode usar o tmpwatch -a em sistemas de arquivos montados com noatime. você ainda pode usar -m
Ubuntu 10.04.2 LTS
e que comando não existe ..
tmpreaper
vez disso.
Tente executar o acima com bom:
nice -n 39 find cache* -mtime +30 -exec rm -f {} ';'
Dessa forma, a enorme carga aparecerá apenas se nada mais precisar executar, caso contrário, os outros processos terão precedência (se a gentileza for menor que 19, ou seja, o máximo).
Observe que o argumento para a opção -n é adicionado à gentileza padrão que varia entre -20 e 19. Eu usei 39 para que seja muito agradável, independentemente da gentileza original.
Conforme comentado por chiborg, o carregamento deve-se ao início do rm para cada arquivo encontrado. Notei a resposta em que tmpwatch
é sugerida como alternativa, o que tenho certeza de que funciona bem. No entanto, não é necessário.
O Find pode executar o comando dado ao exec uma vez, se você disser para acumular os arquivos encontrados em uma lista de argumentos como esta:
find /path -name "*.moo" -exec rm {} \+
Às vezes, isso pode falhar, pois a lista de argumentos pode aumentar (em bytes) que o máximo permitido pelo shell (getconf ARG_MAX). Isso pode ser resolvido pelo xargs com a opção -L.
considere este exemplo:
$ 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
Portanto, não há necessidade de instalar software extra, tudo o que você precisa está no gnu-findutils:
find /path -mtime +30 -print0 | xargs -0 -L 5000 rm
\+
; a planície +
é boa o suficiente. (2) Isso não "falhará no trabalho, porque a lista de argumentos pode crescer muito ...". find … -exec … {} +
fará a mesma coisa que xargs
fará; ele executará o comando quantas vezes for necessário. Por exemplo (como no seu exemplo), se você tiver entre arquivos 15001 e 20000, find
executaria o -exec
programa 'd ( rm
) quatro vezes.
cache*
expandido para muitos arquivos, tente algo como issofind . -name 'cache*' -mtime +30 -exec rm {} \;
.