20
Nov
2008
victor

Ftp recursivo desde línea de comandos

Tengo una cuenta de alojamiento compartido en un proveedor español que, como la gran mayoría de empresas dedicadas al alojamiento de sitios web (hosting es la palabra utilizada en inglés), normalmente te dan acceso vía ftp para subir los ficheros que forman parte del sitio que se desea publicar.

Cuando subo los ficheros por ftp desde mi casa no hay problema, ya que puedo utilizar diversidad de clientes FTP gráficos (como Filezilla, una opción gratuita muy interesante para Windows), aunque si hay que subir multitud de ficheros (y no hay opción de subir el archivo comprimido y desempaquetarlo después) la operación a través de una línea ADSL convencional puede llevar un buen rato.

En mi caso, dado que además he contratado un servidor privado virtual en otro proveedor, que tiene mucha mejor conectividad con el servidor de ftp al que quiero subir los ficheros, puedo usar este servidor para subir los ficheros a través de una terminal. Ya conocía que el comando mput del protocolo ftp no es recursivo, así que buscando encontré una página de la Universidad de Hong Kong que explicaba el uso de un comando muy interesante, el ncftpput. Sólo es preciso descargar las fuentes del NcFTP Client y compilarlas para generar e instalar diversos programas relacionados además del mencionado ncftpput.

Una vez instalado, la utilización es muy sencilla, ya que basta con indicar el host, usuario y contraseña y carpetas de destino (remota) y origen (local) para la copia para que empiece la operación. Para que el proceso de copia sea recursivo se debe especificar el parámetro -R. Una línea de comandos de ejemplo sería:

ncftpput -R -u -p

Concretando más el ejemplo, si queremos subir todos los ficheros de un sitio web que en local están en una ruta /tmp/www, al directorio /sites/ejemplo de un servidor ftp denominado ftp.example.com, utilizando usuario y contraseña ejemplo, la línea de comandos a utilizar sería:

ncftpput -R -u ejemplo -p ejemplo ftp.example.com /sites/ejemplo /tmp/www/*

Y si todo va bien en un momento se habrán subido todos los archivos al servidor ftp remoto. También hay un comando ncftpget, aunque para descargar ficheros de un servidor ftp desde la línea de comandos es mas "popular" el programa wget.