Modificando nomes de arquivos ANTES do wget baixá-los (não renomeando versões locais)

Modificando nomes de arquivos ANTES do wget baixá-los (não renomeando versões locais)

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:

  1. Baixe a lista completa de arquivos e armazene-a em arquivo
  2. Altere a parte final dos nomes dos arquivos
  3. Baixe apenas os arquivos com nome modificado.

Você precisa de um arquivo filter.awksemelhante 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.

informação relacionada