Enviar un archivo a un FTP con un solo comando

Ya vimos cómo conectarnos a un servidor FTP y trabajar con él (o con su contenido) mediante la terminal, o sea, sin hacer uso de aplicaciones gráficas.

Esta vez les traigo un plus o extra … me explico.

Hace algunos años les dejé un script en bash que sirve para hacer backups (salvas) de datos de un servidor. El script copiaba una serie de carpetas (como /etc/), exportaba bases de datos, etc… y lo comprimía con password en un archivo .RAR o .7z (actualmente uso 7z), lo único que le faltaba al script era poder subir después ese archivo comprimido a algún servidor FTP, de esta forma la salva del servidor estaría copiada en otra locación.

En estos días retomé el script para optimizarlo un poco, mejorarlo y obviamente saltó a la luz la necesidad de esto último que les comenté, subir el archivo de salva comprimido a un FTP externo.

¿Cómo subir a un FTP con un solo comando?

Lo que necesitaba era mediante un solo comando conectarme a un FTP con usuario y password, y bueno; subir el archivo hacia una carpeta en específico.

Aplicaciones en terminal que me permiten conectarme a un FTP, poner user & password y subir archivos hay montones, pero … que me permiten hacer esto todo en una línea, con todos los parámetros ya especificados …. eh ahí la cuestión.

Después de revisar 4 o 5 … pensé, eh!! … pero existe curl

Subir a un FTP con curl

Con curl puedo hacer infinidad de cosas, tal vez puedo hacer esto que deseo … y, así es!

Con el parámetro -u puedo especificar el usuario y password, además con el parámetro -T puedo indicarle que suba un archivo, y finalmente para decirle a qué FTP y qué carpeta deseo subirlo, al final simplemente pongo la ruta completa, más o menos así:

curl -u usuario:password -T archivo-backup.7z ftp://192.168.128.2/SERVER_BACKUPS/

Esto lo que hace es conectarse al FTP 192.168.128.2, con el usuario usuario y de contraseña password y subir a la carpeta SERVER_BACKUPS el archivo llamado archivo-backup.7z

Y listo!

¿simple no? …

Claro, esto nos puede ser de utilidad así el comando en solitario, no obstante como mejor se puede aprovechar es con un script como por ejemplo… el que les comenté antes

¿y qué onda con ese script que se menciona?

Le estoy haciendo mejoras al script, sobre todo incorporando algunas peticiones o sugerencias de usuarios.

  • Lo primero que quise hacer era precisamente esto que recién les expliqué, con un solo comando poder subir el archivo de salva a un FTP.
  • Lo otro que un usuario me recomendó fue que enviara un email cuando estaba listo el backup, para eso puedo usar sendmail o un script externo, preferiblemente usaré sendmail. El detalle de usar sendmail es que se puede usar nuestra cuenta de GMail (o cualquier otra) para enviar el email, con cifrado… SSL y lo que sea.
  • También, un usuario me recomendó que también, como una forma de notificación más dinámica, se enviara un mensaje por IM usando el XMPP de GTalk o el de Hotmail (Live o algo así, ya ni sé cómo se llama). Lo intentaré hacer con GTalk primero, pues para Hotmail tendría que recordar o apoyarme en algún sitio para crear una cuenta Hotmail, pues con tanto cambia-cambia que los de Microsoft se tienen, ya ni idea de cómo es.
  • Otra variante de esto último sería usar notificaciones o mensajes que se envíen por Facebook o Twitter. Para Twitter podría usar Twidge mientras que para Facebook podría usar fbcmd. Ambas aplicaciones me permiten interactuar con estas redes sociales desde la terminal.
  • Estoy también pensando en comprobar la integridad de los sql que exporto, pero esto ya requiere un poco más de tiempo 🙂

server ftp

Fin!

Bueno nada más que agregar … por el momento, estoy retomando varios scripts míos hechos en Bash para optimizarlos y mejorarlos, espero no demorarme mucho en traer novedades 😀

Saludos


Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   barnarasta dijo

    Estupendo proyecto,
    lo seguire con mucho interes.
    — algun aviso @ si el servidor esta caido o no se pudo realizar el envio?

    Tremendamente agradable leer articulos de amantes de terminal/consola.

    1salu2

    1.    KZKG^Gaara dijo

      El placer es mío 🙂

      Buena idea, que verifique si el servidor FTP está online y en caso de que no sea así, que envíe un email … lo tendré en cuenta ^_^

  2.   Moisés Serrano dijo

    Yo había adaptado tu script de backup y le adapte un proyecto que permite subir el archivo final a Dropbox (https://github.com/andreafabrizi/Dropbox-Uploader) y envía un correo al finalizar por sendmail.

  3.   dhunter dijo

    Gaara tienes que probar la herramienta idónea para esto: lftp

    Incluso soporta hacer mirror, para sincronizar repos desde un ftp no tiene precio.

    http://www.cyberciti.biz/faq/lftp-mirror-example/

  4.   Jorge dijo

    Muy interesante, es lo hermoso de este sistema, puedes obtener el mismo resultado de múltiples formas; te muestro el método en el que estaba consiguiendo subir archivos a un servidor ftp, es un poco rustico pero igual funciona:

    {
    echo user usuario password
    echo bin
    echo prompt
    echo cd /directorio/del/servidor/ftp
    echo put archivo
    echo close
    echo bye
    } | ftp -n servidor.ftp

    1.    KZKG^Gaara dijo

      OOOHHH interesante, no conocía que se podía hacer así 😀
      Gracias!!

  5.   Sephiroth dijo

    Otras formas, por ejemplo con wput:

    wput archivo_a_subir ftp://USUARIO:PASS@123.123.123.123:21

    o para los que prefieran la simplicidad en un script usando el viejo telnet:

    ftp -n ip_servidor << EOF
    user anonymous test@test.cu
    send FICHERO.txt
    exit
    EOF

  6.   Javier dijo

    Hola, soy principiante en Linux y no se informática —solo a nivel de usuario—, ni programación, ni nada por el estilo, prácticamente soy ignorante en esto. Estaba leyendo este artículo y leí al final del segundo párrafo la palabra «locación»; esa palabra está mal usada, habrás querido decir: ubicación, localización, emplazamiento, lugar. La palabra locación significa otra cosa como dice la RAE «http://dle.rae.es/?id=NXeOXqS».