Linux – Descargar archivos de una URL a partir de un archivo CSV

marzo 7, 2014

wget

wget

Para realizar esta tarea utilicé el comando wget. Para especificar o dar formato a la URL encontré 3 opciones: awk, sed y el mismo comando wget.

awk me pareció el más complejo por eso no lo utilicé. La opción wget -i es la más senciclla pero necesitas tener en el archivo las url’s  fijas de los archivos que quieres descargar, yo tenía una URL dinámica para cada archivo. El comando sed me pareció la opción mas viable para resolver mi problema.

La url de los archivos que quería descargar era

http://127.0.0.1:8080/ReportViewer/run?__format=xls&__report=rptInformeMensual.rptdesign&REPORTE=ID_REPORTE

la variable ID_REPORTE la tenía en un archivo CSV de la siguiente manera

35ac0194-6992-402d-aa8e-79ae9866b90a COMPRAS
66fbf25f-74ab-412c-abf9-87769582cf48 DIRECCIÓN DE PSICOLOGÍA
7b781032-e529-4d2d-b497-b47b39195688 DIRECCIÓN JURÍDICA
76612f8a-944d-4ce3-bfa6-e9a83a787480 ACTIVO FIJO
...

la primer columna es el id del reporte y la segunda la descripción.

El comando que utilicé fue el siguiente

sed 's/\(.*\)\t\(.*$\)/"http:\/\/127.0.0.1:8080\/ReportViewer\/run?__format=xls\&__report=rptInformeMensual\.rptdesign\&REPORTE=\1" -O "\2\.xls"/' reportes.txt | xargs -l1 wget

Puedes ejecutar sólo la primera parte del comando para revisar que estas pasando los parámetros correctos a wget.

sed recibe como parámetro una cadena con el formato ‘s/regex/substitution/’, regex es una expresión regular que en nuestro caso es el texto hasta el carácter de tabulación ‘\t’ y para el segundo grupo el texto restante hasta el fin de línea indicado por ‘$’. En la expresión regular y en la cadena de substitución hay que tener cuidado de escapar los carácteres especiales como la diagonal, el punto y el ampersand. Los grupos de la expresión regular los insertamos de acuerdo a su posición en la exresión regular \1, \2, \3, etc.

Fuentes:
http://askubuntu.com/questions/103623/download-files-from-a-list
http://unix.stackexchange.com/questions/41598/using-csv-line-as-command-parameters
http://unix.stackexchange.com/questions/32907/what-characters-do-i-need-to-escape-when-using-sed-in-a-sh-script

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: