Sou novo no uso do wget, então espero que esta não seja uma pergunta idiota:
Como posso salvar um arquivo em um diretório local que recebeu o nome do link para o arquivo?
Parece não funcionar se um redirecionamento estiver envolvido no download.
Por exemplo: digamos que estou baixando um arquivo de www.abc.com/news/xyz.jif
, posso fazer com que o wget salve uma cópia local em um diretório chamado www.abc.com
subdiretório news
e depois file xyz.jif
.
Se, no entanto, o arquivo xyz.jif
foi movido www.qwerty.com/old/xyz.jif
e a pesquisa foi redirecionada para lá, o arquivo ainda será salvo em www.abc.com
...etc.
Como eu disse, sou novo nisso, então espero ter explicado o problema corretamente.
Aqui está um exemplo simples do mundo real (usando wget):
wget --force-directories www.smugmug.com/photos/1235566-S.jpg
ele é salvo em: c:\www.smugmug.com/photos/1235566-S.jpg , que éincorreto. Deveria ter salvo em c:\suz.smugmug.com/photos/1235566-S.jpg
, para onde foi redirecionado.
Responder1
Desculpe, não entendi inicialmente. Então, uma resposta completamente nova (rápida e suja - e como é uma programação bash, funciona apenas com Linux): use cURL para determinar se há um redirecionamento (usando -w
parâmetro); dependendo do resultado, use wget para obter o URL original ou o destino de redirecionamento:
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
Ou, em várias linhas:
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
é definido para o destino de redirecionamento, se houver algum. Caso contrário, wget
é chamado com a url original; se sim, wget
chama o alvo de redirecionamento. O -x
parâmetro cria wget
os subdiretórios.
Claro, isso lida com apenas um nível de redirecionamento. Para torná-lo mais robusto, você terá que verificar recursivamente se há um redirecionamento. Portanto, não é apenas uma questão de opções de linha de comando se você deseja resolver esse problema de forma confiável.