Forzar wget para utilizar el nombre de archivo real

51

Cuando se utiliza wgeten un script para descargar algunos archivos de Google Docs, el nombre del archivo no se conserva. Por ejemplo:

wget 'http://spreadsheets.google.com/pub?key=pyj6tScZqmEfbZyl0qjbiRQ&output=xls' 

guarda el archivo como en pub?key=pyj6tScZqmEfbZyl0qjbiRQlugar de indicatorhivestimatedprevalence15-49.xls, que es lo que obtengo si hago clic en el enlace en un navegador. ¿Hay alguna forma de hacer cumplir este comportamiento "similar al del navegador" wget?

Chinmay Kanchi
fuente

Respuestas:

91
wget --content-disposition 'http://spreadsheets.google.com/pub?key=pyj6tScZqmEfbZyl0qjbiRQ&output=xls'

hará el truco por ti.

Todavía no está completamente implementado y parece fallar un poco a veces, por lo que no es la opción predeterminada wget, úselo bajo su propio riesgo.

Bruno Pereira
fuente
1
Lo sé...! Bien eh? ;)
Bruno Pereira
No soy realmente un programador web, por lo que nunca habría pensado en buscar la frase "disposición de contenido". Me ahorró tener que mirar manualmente los encabezados HTTP, descubrir el encabezado de disposición de contenido y tratarlo.
Chinmay Kanchi
GUAU + increíble. THX u roc buena idea.
Kangarooo
@BrunoPereira, también estoy tratando de descargar el archivo de hoja de cálculo de Google. Pero no pude encontrar el enlace para el archivo. ¿Podría decir cómo obtener el enlace para un archivo de hoja de cálculo de Google para que pueda usar wget de la misma manera que Chinmay Kanchi? Gracias por adelantado.
user22180
@ChinmayKanchi Me llamo programador web los últimos 15 años, pero cuando se trata de esto, siempre trato de usar un nombre más significativo en el código.
Tishma
3

Puede intentar usar curl para descargar y mantener el nombre de archivo original:

curl -OJL ${your_url}
  • -O para nombre remoto
  • -J para nombre de encabezado remoto
  • -L para la ubicación

ver opciones de línea de comando curl .

Noam Manos
fuente
0

El enlace Google Docs realmente le dice a un script que se ejecute en el servidor, analizándolo en el archivo que desea. El archivo, que yo sepa, no existe nunca en el servidor en la forma els, pero se genera en tiempo de ejecución cuando lo solicita. Por lo tanto, no hay nada que wget pueda obtener.

Para descargar el archivo, deberá utilizar la API de Google http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#DownloadingDocs/ .

Ethan
fuente
Sí, el servidor solicita que se ejecute un script, que crea el .xlsarchivo sobre la marcha. Sin embargo, un navegador completo no tiene ningún problema con esto. Entonces, obviamente, es posible prescindir de la API de Docs.
Chinmay Kanchi
Pensé que el script ejecutado en el navegador usaría la API, por lo que para hacerlo sin el navegador, uno tendría que recrear el script. Es interesante que wget tenga una bandera para ello.
Ethan