Copiar con curl a un FTP de un directorio recursivo

Pues eso, si estás buscando la manera de copiar un directorio completo desde la consola desde linux, en mi caso ubuntu, con el comando curl puedes hacerlo, pero también vas a necesitar otros tantos comandos para complementarlo… por que como ya sabrás si has llegado hasta aquí, curl solo copia 1 solo fichero a la vez…

Para ello utilizaremos la magia de otros comandos como find y el maravilloso exec:

find eldirectorio/ -type f -exec curl --user username:password --ftp-create-dirs -T {} ftp://ftp.server.com/{} \;

Esta sencilla línea, hace varias cosas la primera es buscar con find en el directorio que indicamos a continuación y luego (no tengo ni idea del resto de parámetros) es ejecutar curl como si fuera la copia de 1 archivo, con la historia de que crea los directorios y subdirectorios y va copiando los archivos en su interior

Si además queremos cribar archivos por fecha de modificación, por ejemplo los últimos 5 días o lo de hace 1 mes aproximadamente, podemos utilizar -mtime definiendo -5 para todo lo de hace menos de 5 días o +10, para todo lo que tenga más de 10 dias, pudiendo usar ambos por ejemplo:

find eldirectorio/ -type f -mtime -10 -mtime +5 -exec curl --user username:password --ftp-create-dirs -T {} ftp://ftp.server.com/{} \;

En este ejemplo anterior estaríamos copiando lo que tenga menos de 10 días, pero más de 5.

Todo un comando que me acaba de salvar horas de mirar la pantalla con mi filezilla comiéndose la conexión de casa.

A disfrutarlo 😉

Carlos Dk

Apasionado por la enseñanza y el SEO

2 comentarios en “Copiar con curl a un FTP de un directorio recursivo

  • el 21 julio, 2021 a las 6:10 pm
    Permalink

    Excelente comando para copiar, mi pregunta es el comando para copiar un listado de archivos con una extension particular como sería

    Respuesta
    • el 22 julio, 2021 a las 7:19 am
      Permalink

      Si buscas en la ayuda del comando find, encontrarás que puedes utilizar la opción -name, prueba a utilizara un comodín tipo * como harías de forma común en cualquier comando, por ejemplo -name «*.pdf» para que tome solo pdfs.

      No lo he utilizado así, pero supongo que podrá funcionar.

      Ya me cuentas 😉

      Respuesta

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.