Blog de joe di castro

Sincronizar una carpeta local y una remota a través de FTP: lftp-mirror

A veces tenemos la necesidad de subir (o bajar) contenido a un servidor y posteriormente tener actualizados los cambios que se produzcan en uno (o ambos) de los lados. Es decir tener sincronizados el directorio remoto y el local. Esto es relativamente fácil cuanto tenemos acceso via consola y ssh al servidor y podemos utilizar programas tan potentes como rsync. ¿Pero que ocurre cuando el único método del que disponemos para intercambiar ficheros con el servidor es a través del protocolo FTP, como ocurre con muchos servidores web?

Bien, en ese caso, tenemos un pequeño problema. El protocolo FTP aunque perfectamente valido para las funciones para las que fue originalmente creado, la transferencia de archivos, no contempla este caso. La solución manual y menos efectiva es volver a transferir todos los archivos cada vez que se produce un cambio, solución nada recomendable a nada que el tamaño de estos empiece a ser superior a decenas de Megabytes. También podríamos ir comprobando manualmente que ficheros han cambiado y transferir únicamente estos, algo también muy poco recomendable si el número de archivos es elevado. Afortunadamente algunos clientes gráficos de FTP nos permiten comprobar que ficheros son distintos en uno y otro lado y luego transferir únicamente estos, lo cual ya es un método bastante más efectivo y adecuado. Aunque si se trata de directorios con muchos archivos y una estructura jerárquica compleja (muchos directorios y subdirectorios) el proceso es bastante lento pues ha de ir comprobando en un lado y en el otro las diferencias entre los archivos (fecha, tamaño y atributos únicamente) recorriendolos todos. ¿Pero que ocurre si queremos realizar esta operación de forma periódica y automática? entonces esta solución tampoco es valida, pues necesitaríamos un programa de línea de comandos o un script para realizarlo.

Por suerte para nosotros, esta solución también está disponible a través de varios programas y scripts para consola, entre los cuales el mejor es lftp de Alexander V. Lukyanov. Este fantástico programa es una navaja suiza para todo aquello que necesitemos hacer a través de FTP, siendo uno de los mejores clientes FTP, si no el mejor, que existen. Y una de las innumerables posibilidades que ofrece es precisamente la de sincronizar dos directorios con la opción mirror (espejar). De esta manera podemos mantener perfectamente sincronizados dos directorios de forma automática. Nos permite hacer la sincronización en ambas direcciones, remoto → local y local → remoto.

Como ya he mencionado es muy potente y repleto de opciones y permite muchas más operaciones más allá de la sincronización entre directorios. Por este motivo he creado un script en Python que empleando lftp, se centra únicamente en la sincronización entre directorios a través de FTP y añade algunas nuevas funcionalidades, lftp-mirror.

¿Que ventajas aporta este script?

Páginas