Sincronizando directorios vía ftp desde el terminal

Si tienes un sitio web es muy recomendable y necesario que hagas copias de seguridad. Si además tu eres el autor del tema, o de un complemento, de WordPress (por ejemplo), querrás tener una copia sincronizada en tu equipo. De esta manera, todos los cambios que realices los tendrás disponibles, y no solo esto, sino que además podrás iniciarla en modo local. Hasta el momento yo lo que venía haciendo era copiar cada archivo que modificaba vía FTP, pero siempre puede suceder que te dejes uno sin actualizar. Esto te puede llevar a cometer el error de tener una copia de seguridad en la que algunos archivos no están actualizados.

Pero sobre todo, lo mas interesante es poder probar y modificar tu tema o complemento de WordPress en modo local. Para tener WordPress en local puedes hacerlo de forma muy sencilla, siguiendo el artículo “Como instalar WordPress en Ubuntu en tres sencillos pasos. Una vez tienes tu WordPress en local, solo te queda probarlo, hacer las correspondientes modificaciones, comprobar su correcto funcionamiento, y luego subirlo a FTP. Pero ¿para que subir todos los archivos?. Lo mejor es sincronizar, de forma que solo subas o bajes aquellos que has modificado.

ftp.png

Entonces, ¿como sincronizar vía FTP en Ubuntu?

Realizando copias de seguridas sobre FTP

lftp es un utilidad que te permite transferir archivos desde el emulador de terminal. Para ello utiliza alguno de los siguientes protocolos, FTP, HTTP, FISH, SFTP, HTTPS y FTPS. Además, soporta FXP que permite la transferencia entre dos servidores FTP. Además incluye un sencillo cliente BitTorrent.

Cada una de las operaciones que realiza lftp es confiable, de forma que en caso de que se produzca un error, esta operación se intenta de nuevo de forma automática. Así, en el caso de que se interrumpa una descarga, esta se reaundará de forma automática desde el punto en que se detuvo. Incluso, en el caso de que el servidor FTP no porte el comando REST, lftp intentará realizar la descarga desde el prinicipio hasta que la transferencia sea completa. Evidentemente esto es realmente útil para servidores con una mala conexión de internet.

lftp utiliza una sintaxis estilo shell permitiéndote que puedas ejecutar varias ordenes en paralelo en segundo plano (&). Además es posible agrupar las órdenes entre parénteesis y ejecutarlo en segundo plano. Todos los trabajos en segundo plano se ejecutarán en un único proceso. Es posible traer a primer plano con el atajo de teclado Ctrl+Z y devolverla a segundo plano utilizando el comando wait. Para conocer todos los procesos en funcionamiento, utilizaremos el comando jobs. Igual que en un shell es posible redirecconar la salida a un archivo o a otro comando. Además es posible ejecutar las ordenes de forma condicional basandose en el estado de la orden anterior (&&, ||).

Por ejemplo:

lftp> cat file | gzip > file.gz
lftp> get file &
lftp> (cd /path && get file) &

lftp puede descargar o actualizar un directorio completo utilizando la opción mirror. También es posible hacer la operación inversa utilizando la opción mirror -R lo que subirá o actualizará el directorio en el servidor en lugar de en local. Incluso, también es posible sincronizar directorios entre dos servidores remotos utilizando FXP, siempre y cuando, esté disponible.

Uso y funcionamiento

Tal y como he comentado anteriormente, lftp funciona como un shell. Así para conectarte a un sitio, es tan sencillo como utilizar la siguiente orden:

lftp ftp.misitio.es

donde ftp.misitio.es es la dirección a la que me quiero conectar vía ftp.

De esta manera nos conectamos con el usuario anonymous y la contraseña lftp@. Si quieres especificar usuario y contraseña, tienes que hacerlo de la siguiente manera,

lftp -u usuario,contraseña ftp.misitio.es

donde usuario es el usuario y contraseña la contraseña, como ya te has podido imaginar.

Si además quieres ver todo la información que te ofrece el servidor, tendrás que utilizar el modo depuración, para lo que la orden será la siguiente,

lftp -d -u usuario,contraseña ftp.misitio.es

Copias de seguridad vía ftp con lftp

Una vez que hemos visto las órdenes básicas, vamos a lo que nos interesa, y es como podemos realizar copias de seguridad vía ftp con lftp.

Para sincronizar un directorio remoto con uno local en el disco duro de tu dispositivo, lftp utiliza la orden mirror. Si no especificamos otras opciones, este comando sincroniza ambos directorios,

mirror /directorio_remoto /directorio_local

Pero también podemos utilizar algunas opciones para especificar con mas detalle el comportamiento de la sincronización. Las opciones mas relevantes que tenemos a nuestra disposición son las siguientes,

  • –delete. Durante la sincronización se borrarán aquellos archivos del directorio local que no estén en el directorio remoto.
  • –only-newer. Activando esta opción, no tiene en cuenta el tamaño de los archivos. De esta forma, solo sincroniza teniendo en cuenta la fecha de los archivos, no su tamaño.
  • –verbose. Para que indique todas las operaciones que está realizando.

Aunque las opciones indicadas, son sin lugar a dudas las mas interesantes, lftp, nos da muchas otras opciones, que puedes consultar en la página de lftp. Algunas de ellas que también puedes considerar son,

  • –no-recursion. Para que no sincronizar directorios de forma recursiva.
  • –ignore-time. Para que no tenga en cuenta la fecha a la hora de la sincronización.
  • –ignore-size. Para que no tenga en cuenta el tamaño de los archivos a la hora de la sincronización.
  • –upload-older. Para que suba los archivos al directorio remoto aunque esos archivos sean mas antiguo en el directorio local.

Por último, una opción a tener muy en cuenta, es la opción –reverse, que nos permite sincronizar en sentido inverso. Así se sincronizará desde el directorio local al directorio remoto.

Así, y por resumir, si queremos sincronizar de nuestro directorio remoto al local, utilizando las opciones mas relevantes indicadas anteriormente:

lftp -u usuario,contraseña -e “mirror --delete --only_newer --verbose /directorio_remoto /directorio_local” ftp.misitio.es

y si queremos hacerlo en sentido inverso, la orden a ejecutar será la siguiente,

lftp -u usuario,contraseña -e “mirror --delete --only_newer --verbose --reverse /directorio_local /directorio_remoto” ftp.misitio.es

Ahora solo te queda automatizarlo con un sencillo script. De esta forma para sincronizar tus directorios solo tendrás que utilizar una sencilla orden desde tu emulador de terminal. También puedes hacer un lanzador de ese script, tal y como expliqué en el artículo “Como crear lanzadores en Ubuntu y derivados.


Más información,

3 comentarios en “Sincronizando directorios vía ftp desde el terminal

  1. JE

    me da risa que cada que necesito algo, escribes sobre ello, como no sabia/se utilizar ftp, hice un repositorio de git en el proyecto, comparti la carpeta donde estaba y con la otra computadora lo clone como repositorio remoto xD , pero me gusta mas la idea el ftp

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *