[Bash Script] Descargar módulos de Drupal 4.7.x

Enviado por cayetano el Mayo 25, 2006 - 09:07 :: Desarrollo | Internet | Trucos Linux

Recientemente ha salido una nueva versión de Drupal, uno de los gestores de contenidos más utilizados en Internet (y sobre el que se basa estas páginas que estás leyendo), que tiene además una gran cantidad de módulos que mejoran y añaden funcionalidades al sistema, el problema es que habría que ir bajando uno a uno cada uno de los 220 módulos disponibles actualmente, una tarea bastante tediosa que vamos a intentar solucionar mediante la potencia del intérprete de comandos bash.

Vamos a hacerlo poco a poco para luego ver la posibilidad de realizarlo en una sóla línea haciendo uso de la concatenación de comandos usando tuberías.

1. Primero habría que descargar y guardar en disco la url: http://drupal.org/project/Modules que o bien se hace desde el navegador o con algún comando como por ejemplo wget o curl.


wget http://drupal.org/project/Modules

2. A continuación habría que ver el código fuente del fichero HTML para conocer la estructura, y lo más importante ver cómo son las urls de los paquetes que contiene cada módulo, como por ejemplo:


<div class="links"><a href="http://ftp.osuosl.org/pub/drupal/files/projects/views-4.7.0.tar.gz">Download</a>

Así que para quedarse sólo con las líneas que incluyan enlaces a los paquetes .tar.gz se haría mediante:


grep tar.gz Modules.html

Que devolvería todas las líneas como la anterior, esto lo devolvería por pantalla, lo suyo sería guardarlo en otro fichero así que se podría redirigir la salida estándar mediante > urls.txt al final del comando

3. Analizando el resultado se ve que la parte interesante estaría en el tercer token (contando como separación el espacio en blanco), para obtener sólo esa parte se puede hacer uso del comando awk (existen más posibilidades, pero a mí me gusta ésta :P):


awk '{ print $3 }' urls.txt

que devolvería como resultado:


href="http://ftp.osuosl.org/pub/drupal/files/projects/acidfree-4.7.0.tar.gz">Download</a>

El resultado también se podría redigirir a otro fichero mediante > urls2.txt (que sea distinto fichero sino nos cargaremos el anterior)

4. De ese fichero ahora se podría delimitar por las comillas dobles y coger el token 2, esta vez se hará uso del comando cut:


cut -d '"' -f 2 urls2.txt

(OJO que es comillasimple comilladoble comillasimple)

Esto ya daría como resultado el listado de urls que estamos persiguiendo, de nuevo se redirige a un fichero de texto con &gt modulos.txt

5. Y ya sólo falta decirle a wget que se descargue todos los módulos:


wget --input-file=modulos.txt

Y ahora lo mejor ¿se puede hacer todo ésto de un tirón? por supuesto, para ello se utilizará links para descargar el código HTML de la página de módulos, y haciendo uso de tuberías, la salida de un comando se le pasará como entrada al siguiente y así sucesivamente:


links -source http://drupal.org/project/Modules | grep tar.gz | awk '{ print $3 }' | cut -d '"' -f 2 | xargs wget

Es posible que los comandos grep + awk + cut se puedan fusionar en uno solo haciendo uso de expresiones regulares, pero eso lo dejaremos para una segunda parte o como tarea del lector ;P

Ni que decir tiene que no se trata de explicar qué hace y para qué sirve cada uno de los comandos utilizados aquí (links, grep, awk, cut, xargs y wget), que para eso ya están las páginas man.

Huelga decir que toda corrección/mejora/comentario/crítica será bienvenida.

»Top