#!/bin/bash

#
# Este script borra aquellos archivos y directorios vacios o que tienen un ctime mayor al especificado,
# del directorio pasado por parametro.
#
# Pensado originalmente para borrar periodicamente todos los archivos del .Trash
#
# En el caso del .Trash se basa en que experimentalmente he comprobado que la fecha de ctime (creacion
# del archivo o modificación del inode dependiendo donde se lea) es modificada cuando se hace un mv, entonces
# todos los archivos del Trash tiene como ctime la fecha en que han sido borrados.
#
# Si muevo un directorio cambia el ctime del directorio movido pero no de su contenido. Entonces primero debo
# chequear si el directorio ya superó el tiempo especificado. Si es así es de suponer que su contenido también.
#
# Pero si el directorio no superó el tiempo dado, debemos ignorar su contenido pues puede tener cualquier fecha.
#
# TODO: Advertir si se encuentran archivos que no pueden ser eliminados (problemas de permisos)
#

#
# Esta función returna TRUE si el parametro pasado es un numero, false en caso contrario
# (http://justlinux.com/forum/showthread.php?t=107246)
#
function isNumeric() { echo "$@" | grep -q -v "[^0-9]"; }

# Chequeo de parametros
if [ $# -ne 2 ]; then echo "Sintaxis: $0 <base-directory> <maximum_days>"; exit 1; fi;
if [ ! -d "$1" ]; then echo "$0: No existe el directorio $1"; exit 2; fi;
if ! isNumeric "$2"; then echo "$0: El segundo parametro debe ser un numero"; exit 3; fi;

# Nombres mas descriptivos para los parametros (ya validados)
BASE_DIR=$1
DAYS=$2

# Buscamos, con base el directorio pasado, todos los directorios y directorios que ya hayan vencido
# y los borramos incluido su contenido. No entramos en los directorios ya que la fecha de los archivos contenidos
# en un directorio no es fiable, y la concideraremos igual a la del directorio.
#
# TODO: Ver como evitar problemas en este borrado si contiene archivos con otros owner que no permita borrarlo
find $BASE_DIR -maxdepth 1 -ctime +$DAYS -type f -execdir rm -f {} \;

find $BASE_DIR -maxdepth 1 -ctime +$DAYS -type d -execdir rm -rf {} \;

