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

Re: Una de bash y diff recursivo




On Nov 25, 2011 8:15 AM, "fernando sainz" <fernandojose.sainz@gmail.com> wrote:
>
> El día 25 de noviembre de 2011 13:16, jmramirez (mas_ke_na)
> <mas_ke_na@hotmail.com> escribió:
> > -----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
> > #####
> >
> >        Todo va bien, menos la parte del "diff -r"
> >
> > Pruebas:
> >
> >
> > srvbacula:~# ls -lRth /root/SERVIDORES.54/NAVISION > /tmp/Navision.dir
> >
> > srvbacula:~# ls -lRth  /root/SERVIDORES.61/NAVISION > /tmp/Navisionbak.dir
> >
> > srvbacula:~# diff -r /tmp/Navision.dir /tmp/Navisionbak.dir |grep "<"
> >>/tmp/Navision.txt
> >
> > srvbacula:~# tail -n 10  /tmp/Navision.txt
> > < /root/SERVIDORES.54/NAVISION/Licencias Navision:
> > < -rwxrwxrwx 1 cos root 19K mar 16  2010 PROD_HASTA_ENE_2012.flf
> > < -rwxrwxrwx 1 cos root 24K ene  7  2010 COS_2010_01_07.flf
> > < -rwxrwxrwx 1 cos root 12K ene  7  2010 COS_2010_01_07.txt
> > < /root/SERVIDORES.54/NAVISION/Plantillas:
> > < -rwxrwxrwx 1 cos root  20K may 19  2010 4.DOC
> > < -rwxrwxrwx 1 cos root  20K may 19  2010 3.DOC
> > < -rwxrwxrwx 1 cos root  40K may 11  2010 2.XLS
> > < -rwxrwxrwx 1 cos root 1,5M may 11  2010 1.DOC
> > < -rwxrwxrwx 1 cos root 1,2M may 10  2010 1.PDF
> >
> > Como veis no da la ruta completa, por eso no me va el script.
> >
> > Ejemplo:
> >
> > cp /root/SERVIDORES.54/NAVISION/$fichero
> > /root/SERVIDORES.61/NAVISION/$fichero
> >
> > Pero $fichero es:
> > $fichero=4.DOC
> >
> > En lugar de:
> > $fichero=Plantillas/4.DOC
> >
> >
> > NOTA: por ahora estoy con echo en lugar de cp, para no romper nada.
> >
> > Gracias por leerme hasta aquí y espero haberme explicado correctamente.
> > No soy programado, como se puede ver XD. Lo mismo hay otra forma mejor
> > de hacer lo que quiero, sin usar el rsync.
> >
> > Un saludo
> > - --
> > "Si los tontos volaran, el cielo se oscurecería"
> >
> > No me envié correos en formatos propietarios
> > http://www.gnu.org/philosophy/no-word-attachments.es.html
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.4.10 (GNU/Linux)
> > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
> >
> > iQEcBAEBAgAGBQJOz4crAAoJEOWNzQnqy+fzx9MIANlppvSZl78WkV3WP2Tsr+6a
> > eVTo4vYsboaLEN5kf3E7N/T0GKDDnSjTI6G76WPy7bmI+xrLf5dMtiTEyNGpA3+Z
> > MkM5+foDMQNrZT7ll/CiSHfJtxgLaM36yfG+dB7yQbv0kn7BtEzLNqgc7dVSGnMN
> > Df+miqF1d3xuN4/qVUf3gC+bHlCDiWXyInNRvcLe4kwboc+i8YzW55toCExHh+bt
> > jHijvI4fjxAEtKvMBb+R2Bo3bEVphAc7bVyF8ttWSM+kkcGTsvIti7oZWZjx5se1
> > 5igPbyoTDqRdGOXmjpFx9c/xiwdC4/aR3E8pNe1tUKNuL6ufhP3fzMkNAMS3wDs=
> > =sET6
> > -----END PGP SIGNATURE-----
> >
> >
> >
>
> Creo que rsync es una buena herramienta, si falla la puedes relanzar
> sin problemas....
> También tienes unison o algo así que permite sincronizaciones
> bidireccionales, a mi me dió un poco de miedo....
>
> Sinceramente, no creo que tu script vaya a superar al rsync....  :-)
>
> S2.
>
>
> --
> To UNSUBSCRIBE, email to debian-user-spanish-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
> Archive: http://lists.debian.org/CAGwrHiW+8V-2s2XgmoGe54q3+XPJUdbxGjPfS1BVBUCp2OA0w@mail.gmail.com
>

Muy Buenos Dias:

Te recomiendo si deseas mantener el uso de el script, reemplazar los 'ls' con el comando 'find' de la siguiente manera:

# find /root/SERVIDORES.54/NAVISION -type f -exec ls -lh {} \;

Este te devolvera una lista con las rutas completas. Hay que trabajar un poco para que funcione el comando 'diff', pero tendras mejores resultados. Si revisas adicionalmente el manual, puede que te ayude a mejorar el rendimiento del script, usando algunas de las opciones para buscar por fechas o tamaños.

Saludos,

German Cardozo Chirinos


Reply to: