Blackhold

Touch a un fichero con una fecha pasada

Posted on abril 10th, 2010 by admin

Ueee!!! pues post numero 100 con la etiqueta Linux! (todos sabemos que es GNU/Linux…) así que os dejo con un script de bash de cosecha propia, quizás se podría hacer de otra forma con menos líneas pero como me han dicho hoy… “en la docencia siempre tienes que comentar -yo lo hago así, pero hay varias formas de hacerlo-“, sabia frase ;)

#!/bin/bash
# ¿dónde estoy?
FECHA_DIA=`date '+%d'`
FECHA_MES=`date '+%m' |tr -d 0`
FECHA_HORA=`date '+%H'`
FECHA_MINUTOS=`date '+%M'`

((NFECHA_MES=$FECHA_MES-1))
LONG_MES=`echo $NFECHA_MES |wc -w`

if [ $LONG_MES -ne 2 ]; then
   NFECHA_MES="0$NFECHA_MES"
fi

touch tiempo.txt
touch -t $NFECHA_MES$FECHA_DIA$FECHA_HORA$FECHA_MINUTOS tiempo.txt
echo "borrando ficheros mas antiguos a un mes" > log.txt
find ~/Desktop/borrar/* ! -newer tiempo.txt -exec rm -Rf {} ; >> log.txt

ERROR1=`find ~/Desktop/borrar ! -newer tiempo.txt |wc -l`
rm tiempo.txt

if [ $ERROR1 -ne 0 ]; then
   ERROR="No se han borrado todos los archivos, revisa que tienes permisos para borrarlos" >> log.txt
fi

Pues un poco de explicación:
– Lo primero que hacemos es poner en variables la fecha actual (date) y a mes le restamos lo que queramos (el script está hecho así para poder modificar fácilmente el tiempo que queramos modificar).
– Comprobamos que el día del mes contiene 2 caracteres (wc -w).
– Creamos un fichero de texto vacío y le definimos la nueva fecha (touch y touch -t).
– Borramos los ficheros mas antiguos a un mes (find).
– Y comprobamos que se hayan borrado todos los ficheros (de nuevo con find y wc -l).

En algunos momentos mandamos la salida a un fichero, con > machacamos lo que pudiese haber de aquel fichero y con >> escribimos la salida al final del fichero.

This entry was posted on dissabte, abril 10th, 2010 at 02:34 and is filed under bash. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Response

« »

guy fawkes