Modificando nomes de arquivos ANTES de wget os descarrega (não renomeando versões locais)

1

Eu tenho um sistema de arquivos de website em que cada arquivo tem duas cópias, uma cópia de resumo e uma cópia grande, com nomes diferentes. Por exemplo, um arquivo de cópia grande pode ser pages / info / GK2grkG23r_lg.html enquanto na cópia de resumo a pré-extensão de letras é alterada como páginas / info / GK2grkG23r_sh.html . Eu estou tentando executar um wget no sistema de arquivos, mas todos os links por design apontam para a pequena cópia para economizar recursos, e eu preciso das cópias grandes. Portanto, ao executar o wget por páginas , você pode fazer o download de todas as cópias de resumo:

pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html

Eu gostaria de mudar os nomes dos arquivos que o wget vai 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á aponte para o primeiro conjunto.

Para deixar claro, não quero baixar os arquivos com o primeiro conjunto de nomes acima e renomeá-los. Eu quero executar wget, que tentará baixar a primeira lista de arquivos, mas altere um pouco as letras para que baixe a segunda lista. Pode fazer isso?

    
por Philip Arnott 02.09.2014 / 15:59

2 respostas

1

Você pode tentar com uma solução alternativa.

Os marcos são:

  1. Faça o download da lista completa de arquivos e armazene-a no arquivo
  2. Alterar a parte final dos nomes de arquivos
  3. 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:
Eu me inspiro em esta resposta .

    
por 02.09.2014 / 18:03
0

Primeiro, obtenha o arquivo de índice:

wget -O index.html "$URI"

Em seguida, reescreva os URLs:

sed -i '/_sh\(\.html\)/_lg/g' index.html

(usei sed, mas você pode preferir, por exemplo, uma abordagem baseada em XSLT. Faça a sua escolha.)

Agora, diga ao wget para capturar todo o pages/info/* , usando o arquivo de índice modificado e com seu local original como o URI de base inicial:

wget --recursive --level=1 \
    --input-file=index.html --force-html --base="$URI" \
    --accept-regex 'pages/info/.*_lg\.html'

N.B. a maioria dessas opções longas tem alternativas curtas - consulte a manpage. Eu usei o formulário longo para maior clareza.

    
por 01.05.2015 / 15:01