Wget - Salvando um arquivo em um diretório local nomeado após o link

4

Eu sou novo em usar o wget, então espero que essa não seja uma pergunta idiota:

Como posso salvar um arquivo em um diretório local que foi nomeado após o link para o arquivo?

Parece que não funciona se houver um redirecionamento envolvido no download.

Por exemplo: digamos que estou baixando um arquivo de www.abc.com/news/xyz.jif , posso obter o wget para salvar uma cópia local em um diretório chamado www.abc.com com o subdiretório news e depois com o arquivo xyz.jif .

Se, entretanto, o arquivo xyz.jif foi movido para www.qwerty.com/old/xyz.jif e a pesquisa foi redirecionada para lá, o arquivo ainda é 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 o wget):

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

ele é salvo em: c: \ www.smugmug.com/photos/1235566-S.jpg, que é incorrente . Ele deveria ter sido salvo em c:\suz.smugmug.com/photos/1235566-S.jpg , para onde foi redirecionado.

    
por Robin 04.06.2015 / 08:31

1 resposta

0

Desculpe, não entendi o ponto inicialmente. Então, uma nova resposta completa (rápida e suja - e já que é programação bash, funciona apenas com o linux): use cURL para determinar se há um redirecionamento (usando o parâmetro -w ); Dependendo do resultado, use wget para obter o URL original ou o alvo 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 o URL original; se sim, wget chama o alvo de redirecionamento. O parâmetro -x torna wget criar os subdiretórios.

Claro, isso lida com apenas um nível de redirecionamento. Para torná-lo mais robusto, você deve verificar recursivamente se houver um redirecionamento. Portanto, não é apenas uma questão de opções de linha de comando se você quiser resolver esse problema de maneira confiável.

    
por 04.06.2015 / 10:29