Borrar archivos que tienen dos dias de antiguedad
   
Linux Solutions Center    
Bienvenido a    :: LINUX SOLUTIONS CENTER ::
México, 
Home Manuales Borrar archivos que tienen dos dias de antiguedad
Linux Solutions C.
Buscar en Linuxsc
Actualidad
GNU/Linux
Gente en Línea
Tenemos 47 invitados conectado(s)
Acceso



Estadísticas
Ver contenido por hits : 1058054
El Clima
Mie Jue Vie
La encuesta del día
¿Cuál es la Red Social que usas más?
 
Anunciate aquí

Centro de Soluciones Linux

Santa Clara Ocoyucan

KoalaSoft-Sitio de Amigos
Computer Fixers



Borrar archivos que tienen dos dias de antiguedad PDF Imprimir E-mail Hits: 1924
Lunes, 25 de Mayo de 2009 05:35
Hay ocaciones que tenemos que hacer una depuración de nuestro sistema y aun mas si es un backup o simplemente la eliminacion de archivos que tengan ya dos dias de antiguedad.

Para ello se requiere de un cron que genera diarmente un respaldo de archivos de la base de datos, solo que el directorio donde se hacen es limitado, por lo tanto es necesario antes de generar el nuevo respaldo, borrar el de 2 dias antes, pero hay que dejar el del dia pasado.

De este respaldo se generan varios archivos, los cuales en el nombre del archivo contienen la fecha de creacion con un formato de AAAAMMDDnombre.bak .

por lo tanto en este momento existen en el directorio los siguientes archivos:

20070723archivo1.bak

20070723archivo2.bak

20070724archivo1.bak

20070724archivo1.bak

y hoy se generarán los archivos

20070725archivo1.bak

20070725archivo1.bak

mi primera idea fue hacer un simple

find . -mtime 2 -exec rm -rf {} \;

ok desmenusando

find, comando basico de busqueda en el entorno unix

el “.” es para decirle que busque de este directorio y sus subdirectorios correspoendientes.

-mtime “fecha de modificacion”

2 (exactamente 2 dias), si usamos -2 seria que tuvieran 2 o menos dias de modificados y si usamos +2 serían los archivos que tuvieran 2 o mas dias de modificados.

-exec ejecutar un comando

rm -rf borrar el archivo . Cuando usamos la clausual -exec tenemos que poner {} \;

Bueno pues hasta ahi parecía que todo funcionaba solo que como el cron corre a la media noche la fecha (12:00) y el archivo se termina de crear a las 12:05, al ejecutar el comando no me borra los archivos del dia 23 porque a las 12:00 los archivos no han cumplido exactamente los 2 dias de modificados, explicandolo mejor

archivo                                 fecha y hora de creacion

20070723archivo1.bak           23 Julio 2007 12:05 AM

20070723archivo2.bak           23 Julio 2007 12:10 AM

20070724archivo1.bak           24Julio 2007 12:05 AM

20070724archivo1.bak           24Julio 2007 12:10 AM

asi que a las 12:00 del dia 25 los archivos del dia 23 aun no cumplen los 2 dias, entonces la línea que necesito sería:

find . -name ‘*20070723*’ -exec rm -rf {} \;

correcto? pero como hago que esto sea dinamico pues con un script asi:

#!/bin/ksh
echo “find . -name ‘*\c”  > borra.sh
date ‘+%y:%m:%d’ | awk -F”:” ‘{printf”20%2d%2d%2d\n”,$1,$2,($3-2)}’ | sed ’s/ /0/g’ | tr -d ‘\n’ >> borra.sh
echo “*’ -exec rm -rf {} \;” >> borra.sh
chmod u+x borra.sh
./borra.sh

y que hace??

la primera línea escribe en el archivo borra.sh lo siguiente “find . -name ‘*”, el \c es para que no de el salto de línea (como se puede ser este script es para el ksh, con el bash puedes poner echo -n y no tendrias que poner el \c) 

la segunda línea saca la fecha de hoy y al formatearla le resta los 2 dias ($3-2) de acuerdo a lo que necesito AAAAMMDD, el tr -d es tambien para evitar el salto de línea, y lo agrega al archivo borra.sh

la tercer línea completa el find con “*’” , el exec y el rm lo explique arriba, y tambien lo agrega al archivo borra.sh

se le dan permisos de ejecution al archivo borra.sh

y finalmente se ejecuta.

si le dieramos un more o un cat al archivo borra.sh contendría: 

find . -name ‘*20070723*’ -exec rm -rf {} \;

con esto el día de hoy se borrarían los archivos del dia 23, sin importar la hora en la que fueron creados.

No es la única forma de hacerlo es la que a mi se me ocurrió

referencias útiles:

dale un man al find jeje

y estas dos ligas

http://csdir.org/tutorials/bash-tutorial/
http://www.wagoneers.com/UNIX/FIND/find-usage.html

 








Chinese (T)EnglishGermanGreekKoreanPolishPortugueseSpanish
Linuxsc está disponible ahora.
Linuxsc en Android
QrDroid

Descarga el APK de Linuxsc
Linuxsc RSS.

Tu Futuro... Hoy
Felipe Angeles
Linuxsc en RSS
No. de Visitas
mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy731
mod_vvisit_counterAyer1587
mod_vvisit_counterEsta Semana3902
mod_vvisit_counterEste Mes11879
mod_vvisit_counterTotal1020904
News Feeds

Ultimo Reporte
Ranking Linux
http://www.wikio.es