¿Cómo wget un archivo con el nombre correcto cuando se redirige?

117

Entonces, después de un tiempo de búsqueda en Google y Super User (y escaneando páginas de manual) no pude encontrar una respuesta a algo que (creo) debería ser simple:

Si vas aqui:

http://www.vim.org/scripts/script.php?script_id=2340

Y trata de descargar el tema:

http://www.vim.org/scripts/download_script.php?src_id=9750

Al igual que:

wget http://www.vim.org/scripts/download_script.php?src_id=9750

Probablemente termines con un archivo llamado download_script.php?src_id=9750.

Pero quiero que se llame molokai.vim, que es lo que sucedería si usara un navegador para descargar este archivo.

¿Qué opciones necesito especificar para wget para el efecto deseado?

También estaría bien con un comando equivalente de Curl.

audio.zoom
fuente

Respuestas:

162
-O file
--output-document=file

Los documentos no se escribirán en los archivos apropiados, pero todos se concatenarán juntos y se escribirán en el archivo. Si -se usa como archivo, los documentos se imprimirán a la salida estándar, deshabilitando la conversión de enlaces. (Use ./-para imprimir en un archivo literalmente llamado -.)

Entonces,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

O puede resolver wgetesto usando la opción --content-disposition si su versión lo admite.

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

Advertencias según la página del manual,

--content-disposition

Si está configurado como activado, se habilita el soporte experimental (no totalmente funcional) para los encabezados de "Disposición de contenido". Actualmente, esto puede dar como resultado viajes de ida y vuelta adicionales al servidor para una solicitud "HEAD", y se sabe que sufre algunos errores, por lo que actualmente no está habilitado de forma predeterminada.

Esta opción es útil para algunos programas CGI de descarga de archivos que usan encabezados de "Disposición de contenido" para describir cuál debería ser el nombre de un archivo descargado.

Puede lograr el mismo comportamiento automatizado con curl, usando,

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-Ousa el nombre remoto y -Jobliga -Oa obtener ese nombre del encabezado de disposición de contenido en lugar de la URL, y -Lsigue las redirecciones si es necesario.

OchoBitTony
fuente
2
Debería haber especificado que esto debe ser automático
audio.zoom
Según tengo entendido, wget se basa en la página web para informarle correctamente si la URL apunta a un archivo y debe guardarse con algo diferente, utilizando el encabezado de disposición de contenido, que wget puede o no ser totalmente compatible. Por lo tanto, no puede hacerlo automáticamente con wget. Curl puede tener más o menos éxito dependiendo de la página web.
EightBitTony
el punto es ser capaz de escribir estas cosas sin un análisis complicado, curl está bien, pero hasta ahora tampoco he podido recopilar opciones decentes para eso
audio.zoom
2
Ajá - Estoy equivocado, ver respuesta actualizada. Es por eso que los sitios de stackexchange funcionan bien: ¡todos aprenden algo, incluso las personas que responden las preguntas!
EightBitTony
1
Esto funcionó para mí para el podcast stackexchange, que me había estado molestando durante un tiempo. Gracias.
Richard Campbell
75

Con wget puedes hacer esto:

wget --trust-server-names <url> 

para guardar el archivo usando el último nombre de archivo que le da el servidor.

Thi Duong Nguyen
fuente
2
Me pregunto cuál es la diferencia entre --trust-server-namesy--content-disposition
JamesTheAwesomeDude
3
Parece que a --trust-server-namescontinuación se redirige a un archivo diferente y --content-dispositionnombra el archivo con el nombre especificado en el encabezado de la respuesta sin necesidad de redireccionar.
Asfand Qazi
1
¿Por qué no es esta funcionalidad predeterminada?!?!
hopeseekr
8
@hopeseekr El servidor puede ser travieso y llamar al archivo .bashrc si no lo está observando atentamente. lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady
3

También podría usar aria2c : parece funcionar bien con los encabezados Content-Disposition.

dkam
fuente