
Estou tentando baixar o site com o comando:
wget -r -l 0 -p -k -m -e robots=off --restrict-file-names=nocontrol,unix http://example.com
Ao encontrar o link, por exemplo, http://example.com/direction
ele cria um arquivo no disco./example.com/direction
Então, por exemplo, ele encontra alguns outros arquivos (links) na 'direção', suponhahttp://example.com/direction/11
E wget
reescreva o arquivo antigo ./example.com/direction
com algum HTML e transforme-o no diretório. E escreva um novo arquivo ./example.com/direction/11
lá.
Se encontrar um novo arquivo dentro dele /direction/11
, ele também o reescreverá 11
e o converterá no diretório.
Parece que perdi todos os arquivos de índice de diretório.
Existe uma solução para o problema no próprio wget?
Responder1
Isso pode não funcionar em todos os casos, mas consegui resolver esse problema usando uma tag um tanto inesperada.
Do manual do wget 1.17.1:
‘-E’
‘--adjust-extension’
Se um arquivo do tipo
‘application/xhtml+xml’
ou‘text/html’
for baixado e o URL não terminar com regexp‘\.[Hh][Tt][Mm][Ll]?’
, esta opção fará com que o sufixo‘.html’
seja anexado ao nome do arquivo local.
Assim, no seu caso, quando o wget encontrar o link http://example.com/direction
, ele irá verificar se a página está formatada em html. Nesse caso, ele será salvo no disco local como arquivo /example.com/direction.html
. Então, quando vir http://example.com/direction/11
, ele o salvará no disco como /example.com/direction/11
, não sobrescrevendo assim o primeiro arquivo. Supondo que a verdadeira estrutura de diretórios seja /example.com/direction/index.html
, ela não corresponderá exatamente à estrutura de diretórios remotos, mas pelo menos não substituirá os arquivos incorretamente.
Responder2
Bem, uma solução para esse problema usando apenas o Wget é quase impossível. Deixe-me primeiro tentar explicar o problema para você.
Primeiramente o Wget tenta fazer o download, http://site.com/direction
. Quando o Wget envia uma solicitação para esse caminho, o servidor responde com os dados disponíveis no arquivo http://site/com/example/index.html
. No entanto, neste ponto, o Wget não tem conhecimento de que os dados que lhe são enviados correspondem ao caminho: example/index.html. Agora, quando o Wget encontra outro arquivo, http://site.com/example/11
a mesma coisa acontece novamente. No entanto, ele deve primeiro criar o diretório example/ e excluir incondicionalmente o arquivo antigo para fazer isso. IMO, o Wget deve detectar se está substituindo um arquivo por um diretório e salvar o arquivo como um arquivo de índice. Mas, a partir de agora, isso não acontece.