Wget: guardar un archivo en un directorio local con el nombre del enlace

Wget: guardar un archivo en un directorio local con el nombre del enlace

Soy nuevo en el uso de wget, así que espero que esta no sea una pregunta tonta:

¿Cómo puedo guardar un archivo en un directorio local que lleva el nombre del enlace al archivo?

No parece funcionar si hubo una redirección involucrada en la descarga.

Por ejemplo: digamos que estoy descargando un archivo de www.abc.com/news/xyz.jif, puedo hacer que wget guarde una copia local en un directorio llamado www.abc.comsubdirectorio newsy luego file xyz.jif.

Sin embargo, si el archivo xyz.jifse movió www.qwerty.com/old/xyz.jify la búsqueda se redirigió allí, el archivo aún se guarda en www.abc.com...etc.

Como dije, soy nuevo en esto, así que espero haber explicado el problema correctamente.

Aquí hay un ejemplo simple del mundo real (usando wget):

wget --force-directories www.smugmug.com/photos/1235566-S.jpg

se guarda en: c:\www.smugmug.com/photos/1235566-S.jpg, que esincorrecto. Debería haberlo guardado en c:\suz.smugmug.com/photos/1235566-S.jpg, donde fue redirigido.

Respuesta1

Lo siento, no entendí el punto inicialmente. Entonces, una respuesta completamente nueva (rápida y sucia, y como es programación bash, solo funciona con Linux): use cURL para determinar si hay una redirección (usando -wel parámetro); dependiendo del resultado, use wget para obtener la URL original o el destino de redireccionamiento:

url=www.smugmug.com/photos/1235566-S.jpg; redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`; if [ -z $redirurl ]; then wget -x $url; else wget -x $redirurl; fi

O, en varias líneas:

url=www.smugmug.com/photos/1235566-S.jpg;
redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`;
if
    [ -z $redirurl ];
then wget -x $url;
else wget -x $redirurl; fi

redirurlse establece en el objetivo de redirección, si lo hay. Si no, wgetse llama con la URL original; En caso afirmativo, wgetllama al objetivo de redirección. El -xparámetro hace wgetcrear los subdirectorios.

Por supuesto, esto maneja sólo un nivel de redirección. Para hacerlo más sólido, deberá verificar de forma recursiva si hay una redirección. Por lo tanto, no es sólo una cuestión de opciones de línea de comando si desea resolver este problema de manera confiable.

información relacionada