[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Una de bash y diff recursivo



2011/11/25 jmramirez (mas_ke_na) <mas_ke_na@hotmail.com>:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Buenas a todos
>
>        Estoy haciendo un script para que sincronice dos directorios (un nas de
> un edificio con otro nas en otro edificio), antes tenia puesto el rsync.
> Pero se agotaba el tiempo de espera y daba muchos fallos ( la conexión
> entre nas'es no es muy buena). Así que decidí copiar archivo por archivo
> ( hago otros backups correctamente de esta forma pero este me da
> problemas (Por los subdirectorios)) y que enviara correo. Así en caso de
> fallos se en que punto se quedo y puedo retomarlo.
>
>        Lo que ocurre es que listo los directorios y los comparo con diff. Pero
> me he encontrado con muchos subdirectorios y con el modificador -r del
> diff no me funciona como yo espero. Una alternativa "chunga" seria que
> me creara un diff por cada subdirectorio, pero no se si el día de mañana
> habrá nuevos directorios.
>
>        Así que recurro a la lista a ver si alguien puede ayudarme:
>
> #####
> #!/bin/bash
>
> # guardo el listado de los directorios en ficheros.
>
> Navision=`ls -lRth /root/SERVIDORES.54/NAVISION > /tmp/Navision.dir`
> Navisionbak=`ls -lRth  /root/SERVIDORES.61/NAVISION > /tmp/Navisionbak.dir`
>
> # Comparo con diff y paso al fichero lo que hay que copiar
>
> diff -r /tmp/Navision.dir /tmp/Navisionbak.dir |grep "<" >/tmp/Navision.txt
>
> # Limpio el listado para dejar solo el nombre a fin de copiarlo
>
> Navisionlimpio=`cat /tmp/Navision.txt | awk {'print $6'} >
> /tmp/Navisionlimpio.txt`
>
> # comparo con diff usando una lista ( lee linea por linea)
> # Por cada linea del fichero, guarda la hora inicio, guarda el tiempo de
> ejecucion del comando
> # copia la cinta correspondiente guardando un log que luego envio por
> correo y guarda la hora de finalizacion
>
> # Navision
> for fichero in $(cat /tmp/Navisionlimpio.txt)
>        do
>                tiempo=`date > /tmp/Navision.log`
>                /usr/bin/time -p -o /tmp/timeNavision.log echo
> /root/SERVIDORES.54/NAVISION/$fichero
> /root/SERVIDORES.61/NAVISION/$fichero > /tmp/Navisioncopias.log
>                tiempo1=`date > /tmp/tiempo1Navision.log`
>                /usr/local/nagios/libexec/correo_entreNASES.pl
> jmramirez@cosmantenimiento.com
>
>        done
>
> # EOF
> #####
>


No se si me he perdido algo pero creo que no lo estas enfocando de la mejor manera. ¿Que te parece así?

DIR_A_SINCRONIZAR=
INTERVALO_EN_DIAS=1
DIR_DESTINO=

find $DIR_A_SINCRONIZAR -mtime -$INTERVALO_EN_DIAS|while read file; do
   cp -p $file $DIR_DESTINO;
done

lo pones en un cron que se ejecute una vez al día y te copiara solo los archivos que se hayan modificado/creado des de la última ejecución. 
Quedará hacer algo más para asegurar que si un día falla no se queden sin copiar los cambios de ese día. 
--
Marc


Reply to: