Necesita eliminar *.xml de directorios desconocidos que tienen más de x días

Tenemos un directorio:

/inicio/httpdocs/

En este directorio puede haber directorios o subdirectorios de directorios, o subdirectorios de subdirectorios, y así sucesivamente que contienen archivos XML (archivos que terminan en .xml) - No sabemos qué directorio contiene archivos xml y estos directorios contienen una gran cantidad de archivos

queremos archivar todos los archivos y eliminarlos de los directorios reales para que solo contengamos los archivos xml de los últimos 7 días en los directorios mencionados anteriormente.

Me mencionaron que logrotate sería una buena opción para hacer esto, ¿es esa la mejor manera de hacerlo? De ser así, ¿cómo lo configuraríamos?

Además, si no se usa la rotación de lotes, ¿se puede programar esto? ¿Se puede ejecutar este script durante las horas de producción o atascará el sistema?

sas

preguntado el 21 de mayo de 12 a las 18:05

3 Respuestas

find -name "*.xml" -mtime +7 -print0 | tar -cvzf yourArchive.tar.gz --remove-files --null --files-from -

Creará un archivo tar comprimido con gzip 'yourArchive.tar.gz', que contiene todos los archivos *.xml en el directorio actual y cualquier profundidad de subdirectorio que no haya cambiado durante las últimas 24*7 horas y después de agregar estos archivos al archivo tar los archivos se eliminan.

Edit:

¿Se puede ejecutar este script durante las horas de producción o atascará el sistema?

Depende de su sistema en realidad. Esto crea mucha carga de E/S. Si su sistema de producción utiliza una gran cantidad de E/S y no tiene un subsistema de E/S fantástico (como un gran sistema RAID conectado mediante un canal de fibra o similar), esto tendrá un impacto notable en su rendimiento. . Sin embargo, qué tan malo es esto depende de más detalles.

Si la carga del sistema es un problema, puede crear una pequeña base de datos que realice un seguimiento de los archivos, tal vez usando inotify, que puede ejecutarse en segundo plano durante un período de tiempo más largo, siendo menos notado.

También puede intentar establecer la prioridad de los procesos mencionados usando renice, pero dado que el problema es la E/S y no la CPU (a menos que su CPU apeste y su E/S sea realmente excelente por alguna razón), es posible que esto no produzca el efecto deseado. Pero entonces, la siguiente mejor opción sería escribir su propio script rastreando el árbol de archivos que está decorado con sueños. Tomará algún tiempo completarlo, pero generará menos impacto en su sistema de producción. No recomendaría nada de esto a menos que realmente tengas presión para actuar.

contestado el 21 de mayo de 12 a las 19:05

Utiliza find /home/httpdocs -name "*.xml" -mtime +7 -exec archive {} \; sin que importe archive es un programa que archiva y elimina un archivo XML.

contestado el 21 de mayo de 12 a las 20:05

Probablemente será más fácil hacer esto con find y un trabajo cron.

El comando de búsqueda:

find /home/httpdocs -name \*.xml -ctime +7 -exec mv -b -t /path/to/backup/folder {} +

Esto moverá cualquier archivo que termine en .xml dentro del árbol /home/httpdocs a la carpeta de copia de seguridad que proporcione, haciendo una copia de seguridad de cualquier archivo que se sobrescriba (-b).

Ahora, para configurar esto como un trabajo cron, ejecute crontab -e como un usuario que tiene permisos de escritura tanto en los httpdocs como en las carpetas de copia de seguridad (probablemente raíz, por lo que sudo crontab -e). Luego agregue una línea como la siguiente:

14    3    *    *    *  find /home/httpdocs -name \*.xml -ctime +7 -exec mv -b -t /path/to/backup/folder {} +

Esto ejecutará el comando a las 3:14 a. m. todos los días (cambie el 3 y el 14 por horas diferentes). También podrías poner el find comando en un script y ejecútelo, solo para acortar la línea.

contestado el 21 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.