miércoles, marzo 08, 2006

Organización de archivos

Ahí va un script para eliminar de un directorio los archivos más antiguos de X dias y rotar los demás en función de si un fichero o directorio ocupa más de Y megas

#!/bin/bash

#Variables

# Dias que conservamos los ficheros
DAZE=15
# Longitud del fichero
LONG=30
DIR=/logs/
FILE=fichero
SERV=/etc/init.d/servicio

FICH=${DIR}$FILE

#Comprobamos si FICHERO ocupa mas de LONG MB
if [ `du -cms $FICH | tail -1 | cut -f1` -ge $LONG ] ; then

#Paramos el servicio SERV

$SERV stop

#Esperamos 2 minutos (pura precaucion para que el servidor pare)
sleep 120;

# Movemos el fichero

mv $FICH ${FICH}$(date +%d%m%y)

cat /dev/null > $FICH

$SERV start

#Eliminamos los ficheros más antiguos de DAZE dias
rm -f $(find $DIR -ctime +$DAZE)

fi

2 comentarios:

Anónimo dijo...

¿¿¿Coño, y por qué no usar simplemente logrotate???

Que ganas de reinventar la rueda, nene...

XiR_ dijo...

Porque este script se basa en el tamaño de un fichero o directorio, no en el tiempo.