Eu tenho uma pasta de cache com no mínimo 15000 arquivos.
Eu tentei isso:
find cache* -mtime +30 -exec rm {} \;
Mas isso fez o meu servidor carregar voar para o céu!
Existe alguma solução mais rápida / melhor ?
Ou posso limitar a velocidade ou as iterações deste comando?
linux
ubuntu
command-line
find
Kristian
fonte
fonte
cache*
expandido para muitos arquivos, tente algo como issofind . -name 'cache*' -mtime +30 -exec rm {} \;
.Respostas:
Eu gosto de usar
tmpwatch
para essas coisas, é a última vez que o arquivo foi modificado. É simples e funciona bem em muitos casos:Para o Ubuntu, verifique
tmpreaper
.Se você deseja verificar a última vez que o arquivo foi acessado, use o seguinte:
Você não pode usar o tmpwatch -a em sistemas de arquivos montados com noatime. você ainda pode usar -m
fonte
Ubuntu 10.04.2 LTS
e que comando não existe ..tmpreaper
vez disso.Você pode evitar a geração de um novo processo para cada arquivo usando
fonte
Tente executar o acima com bom:
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.
fonte
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:
À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:
Portanto, não há necessidade de instalar software extra, tudo o que você precisa está no gnu-findutils:
fonte
\+
; 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 quexargs
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.