Tengo una carpeta de caché con un mínimo de 15000 archivos.
Intenté esto:
find cache* -mtime +30 -exec rm {} \;
¡Pero esto hizo que la carga de mi servidor vuele a los cielos!
¿Hay alguna solución más rápida / mejor ?
¿O puedo limitar la velocidad o las iteraciones de este comando?
linux
ubuntu
command-line
find
Kristian
fuente
fuente
cache*
expande a muchos archivos, puede probar algo como en sufind . -name 'cache*' -mtime +30 -exec rm {} \;
lugar.Respuestas:
Me gusta usar
tmpwatch
para estas cosas, esta es la última vez que se modificó el archivo. Es simple y funciona bien en muchos casos:Para Ubuntu, verifique en su
tmpreaper
lugar.Si desea verificar la última vez que se accedió al archivo, utilice lo siguiente:
No puede usar tmpwatch -a en sistemas de archivos montados con noatime. todavía puedes usar -m
fuente
Ubuntu 10.04.2 LTS
y ese comando no existe ...tmpreaper
lugar.Puede evitar que se genere un nuevo proceso para cada archivo utilizando
fuente
Intenta ejecutar lo anterior con nice:
De esa forma, la gran carga solo aparecerá si no se necesita ejecutar nada más; de lo contrario, los otros procesos tendrán prioridad (si su simplicidad es inferior a 19, es decir, el máximo).
Tenga en cuenta que el argumento de la opción -n se agrega a la simplicidad predeterminada que varía entre -20 y 19. Utilicé 39 para que sea muy agradable independientemente de la simpatía original que haya.
fuente
Como comentó chiborg, la carga se debe al inicio de rm para cada archivo encontrado. Noté la respuesta donde
tmpwatch
se sugiere como alternativa, que estoy seguro funciona bien. Sin embargo, no es necesario.Find puede ejecutar el comando dado a exec una vez, si le dice que acumule los archivos encontrados en una lista de argumentos así:
Esto a veces puede fallar porque la lista de argumentos puede crecer (en bytes) más que el máximo permitido por el shell (getconf ARG_MAX). Esto puede resolverse mediante xargs con la opción -L.
considera este ejemplo:
Por lo tanto, no es necesario instalar software adicional, todo lo que necesita está en gnu-findutils:
fuente
\+
; claro+
es lo suficientemente bueno. (2) Esto no "dejará de funcionar porque la lista de argumentos puede crecer ...".find … -exec … {} +
hará lo mismo quexargs
hará; ejecutará el comando tantas veces como sea necesario. Por ejemplo (como en su ejemplo), si tiene entre 15001 y 20000 archivos,find
ejecutaría el-exec
programa 'd (rm
) cuatro veces.