
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.com
subdirectorio news
y luego file xyz.jif
.
Sin embargo, si el archivo xyz.jif
se movió www.qwerty.com/old/xyz.jif
y 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 -w
el 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
redirurl
se establece en el objetivo de redirección, si lo hay. Si no, wget
se llama con la URL original; En caso afirmativo, wget
llama al objetivo de redirección. El -x
parámetro hace wget
crear 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.