Sincronizando directorios vía ftp desde el terminal

Aprovechando que el otro día escribí sobre el terminal, para hacerlo mas atractivo a la vista, tengo que mencionar, como también pudiste ver en el artículo referente a embeber fuentes en sitios web, que una de las ventajas que sin dudas presenta frente a otro tipo de soluciones es la automatización mediante scripts. Esto sin lugar a dudas, tiene su mayor exponente en la gestión y administración de servidores remotos y otro tipo de máquinas, pero es aplicable a cualquier otro tipo de tarea rutinaria y repetitiva que tengamos que hacer.

Un caso típico, y el motivo de este artículo, es el de sincronizar un directorio local con uno remoto, por ejemplo un sitio web estático, que modificamos de forma local, y queremos actualizar en el servidor remoto. Para esta operación existen diferentes herramientas, pero, me quiero centrar en lftp.

lftp

  1. lftp es un progrma de transferencia de archivos, desarrollado Alexander V Lukyanov , que nos permite realizar todo tipo de conexiones ( ftp, http etc.. ) con otros hosts, pudiendo gestionar diferentes métodos de acceso ftp, ftps, http, https, hftp, fish, sftp y file

Una de las ventajas de lftp, es que utiliza una sintaxis muy similar a la que utilizamos en el shell, de forma que podemos lanzar varios comandos en paralelo y en sengundo plano, para lo que utilizaremos &, para mandarlos a segundo plano, y encerrarlos entre paréntesis, para agrupar comandos.

De entre todas las opciones posibles, hay que destacar dos, el modo “mirror”, que nos permitirá descargar o actualizar un directorio completo, y el modo “reverse mirror”, que nos permite subir o actualizar el directorio en cuestión, pero en el servidor remoto, que es la opción que andaba buscando. Pero, además, también permite sincronizar directorios entre servidores remotos.

Las opciones de configuración de mirror, son considerables, pero me voy a centrar en las que mas nos pueden interesar, y que básicamente estoy utilizando.

  • –continue continuará el trabajo aunque se produzca un error, siempre que sea posible
  • –reverse sube el directorio al servidor
  • –delete elimina los archivos en el directorio local, si no están presentes en el servidor remoto, o bien, elimina los archivos del servidor remoto, si no están presentes en el directorio local si estamos utilizando el modo –reverse
  • –verbose imprime en pantalla cada uno de los pasos que va haciendo
  • –ignore-time a la hora de sobrescribir un archivo no tendrá en cuenta la fecha del mismo. Es decir, dos archivos con diferente fecha, serán tratados como el mismo archivo, siempre y cuando, el tamaño del archivo sea el mismo.
  • –parallell=4 realiza cuatro procesos de forma simultánea

Todo esto se puede resumir en un sencillo script, que nos permitirá sincronizar nuestro directorio local, con el servidor remoto. También se puede sincronizar desde el remoto con el local, con tan solo eliminar la opción “–delete”


#!/bin/bash
HOST="FTP.DIRECCION.ES"
USER="TU_NOMBRE_DE_USUARIO"
PASS="TU_CONTRASEÑA"
LCD="DIRECCION_LOCAL"
RCD="DIRECCION_REMOTA"
lftp -c "set ftp:list-options -a;
open ftp://$USER:$PASS@$HOST;
lcd $LCD;
cd $RCD;
mirror --reverse --delete --verbose --ignore-time --parallel=4"

LCD="/home/atareao/Documentos/blog/public_html"
RCD="/public_html/test"

Lo que hace el script anterior es lo siguiente:

  • open ftp://$USER:$PASS@$HOST;, se conecta al directorio mediante ftp con el usuario y contraseña que le hayas indicado
  • lcd $LCD; cambia al directorio local.
  • cd $RCD; cambia al directorio remoto que queremos sincronizar con el local.
  • mirror –reverse –delete –verbose –ignore-time –parallel=4 realiza la sincronización

El echo de utilizar la opción “–ignore-time”, se debe a que al actualizar todos los archivos en modo local, se cambiará la fecha, aunque sin embargo, el archivo será exactamente igual, a menos que haya cambiado el tamaño, opción que no he contemplado.

Conclusiones

Desde luego que existen diferentes posibilidades para la sincronización vía FTP, incluso con interfaz gráfico, sin embargo, en procesos donde lo único que tienes que hacer es una sincronización, sin atender a los posibles resultados, de forma mecánica, habitual, y sistemática, lo mejor es un script que realice todo el trabajo, mientras que tu te dedicas a cualquier otra cosa. Incluso puedes hacer una proceso programado mediante “cron”.

Como de costumbre, rompo una lanza en favor del uso del emulador del terminal, sobre todo para aquellos que son nuevos en Linux, o bien, que son reacios a su uso. Es absurdo utilizar un interfaz gráfico, cuando mediante cuatro comandos puedes resolver toda la operación.

 

Más información: lftp | rpublica.net

Fuente: atareao

¿Quién está en línea?

Hay 26516 invitados y ningún miembro en línea