.png)
Eu tenho um sistema de arquivos de site em que cada arquivo possui duas cópias, uma cópia resumida e uma cópia grande, com nomes diferentes. Por exemplo, um arquivo de cópia grande pode ser páginas/info/GK2grkG23r_lg.htmlenquanto na cópia resumida as pré-extensões das letras são alteradas conformepáginas/info/GK2grkG23r_sh.html. Estou tentando executar um wget no sistema de arquivos, mas todos os links por design apontam para a cópia pequena para economizar recursos e preciso das cópias grandes. Então, enquanto executa o wgetPáginaspode baixar todas as cópias resumidas:
pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html
Gostaria de alterar os nomes dos arquivos que o wget irá baixar para:
pages/info/GK2grkG23r_lg.html
pages/info/2Yp58xr4Ir_lg.html
pages/info/Lmk2nIj23r_lg.html
pages/info/M23Dka6D4r_lg.html
Mesmo que os arquivos que o wget encontrará apontem para o primeiro conjunto.
Para ser claro, não quero baixar os arquivos com o primeiro conjunto de nomes acima e depois renomeá-los. Quero executar o wget, que tentará baixar a primeira lista de arquivos, mas alterará um pouco as letras para baixar a segunda lista. O wget pode fazer isso?
Responder1
Você pode tentar uma solução alternativa.
Os marcos são:
- Baixe a lista completa de arquivos e armazene-a em arquivo
- Altere a parte final dos nomes dos arquivos
- Baixe apenas os arquivos com nome modificado.
Você precisa de um arquivo filter.awk
semelhante a este
/^--.*-- http:\/\/.*[^\/]$/ { u=$3; }
/^Length: [[:digit:]]+/ { print u; }
Passo a passo:
wget -r -np --spider http://yourhost | awk -f filter.awk > My_List.txt
sed -i s/_sh.html/_lg.html/g My_List.txt
wget -x -i My_List.txt
Créditos:
me inspiro emesta resposta.
Responder2
Primeiro, obtenha o arquivo de índice:
wget -O index.html "$URI"
Em seguida, reescreva os URLs nele:
sed -i '/_sh\(\.html\)/_lg\1/g' index.html
(Eu usei sed, mas você pode preferir, por exemplo, uma abordagem baseada em XSLT. Faça a sua escolha.)
Agora, diga ao wget para pegar todos os arquivos pages/info/*
, usando o arquivo de índice modificado e com sua localização original como URI base inicial:
wget --recursive --level=1 \
--input-file=index.html --force-html --base="$URI" \
--accept-regex 'pages/info/.*_lg\.html'
Nota: a maioria dessas opções longas tem alternativas curtas - consulte a página de manual. Usei o formato longo para maior clareza.