Existe uma maneira de desabilitar o wget de obter arquivos de diretórios pai para determinada profundidade?

9

wget tem a opção -np , que desativa a obtenção de arquivos de qualquer diretório pai. Eu preciso de algo semelhante, mas um pouco mais flexível. Considere:

www.foo.com/bar1/bar2/bar3/index.html

Eu gostaria de obter tudo, mas não "superior" (na hierarquia da árvore) do que bar2 (!). Portanto, bar2 também deve ser buscado, mas não bar1 .

Existe uma maneira de tornar o wget mais seletivo?

Antecedentes: estou tentando espelhar um site, com uma estrutura lógica semelhante - ponto de partida, depois para cima, depois para baixo. Se houver outra ferramenta além de wget , mais adequada para esse layout, entre em contato comigo também.

Atualizar

Ou em vez de especificar uma possível profundidade, talvez algo como "sem pais, a menos que eles correspondam a essa ou aquela URL".

Atualização 2

Existe alguma estrutura no servidor, certo? Você pode visualizá-lo como uma árvore. Então, normalmente com "--no-parent" você começa de algum ponto A e desce apenas para baixo.

Meu desejo, é a habilidade de subir - expresso dizendo que é permitido subir até nós X, ou (o que é 100% equivalente) que é permitido ir até o nó B (onde a distância BA = X).

Em todos os casos, as regras de descida permanecem conforme definidas pelos usuários (por exemplo, diminuem apenas pelos níveis Y).

Como armazená-lo? Na verdade, não é a questão realmente - wget por padrão recria a estrutura do servidor, não há nada aqui para ter medo, ou não há necessidade de consertar nada. Então, em 2 palavras - como sempre.

Atualização 3

Estrutura de diretórios abaixo - vamos assumir que em cada diretório existe apenas um arquivo, em R - R.html e assim por diante. Isso é simplificado, é claro, porque você pode ter mais de uma página.

        R 
       / \
      B   G
     / \
    C   F
   / \
  A   D
 /
E 

A (A.html) é o meu ponto de partida, X = 2 (então B é o nó de nível mais alto que eu gostaria de buscar). Neste exemplo específico, isso significa buscar todas as páginas, exceto R.html e G.html. A.html é chamado de "ponto de partida" porque eu tenho que começar a partir dele, não de B.

Atualização 4

A nomeação é usada na Atualização 3.

wget OPTIONS www.foo.com/B/C/A/A.html

A questão é quais são as opções para obter todas as páginas do diretório B e abaixo (sabendo que você tem que começar de A.html).

    
por greenoldman 15.12.2011 / 14:04

4 respostas

11

Eu não tentei, mas usar -I e -X poderia dar o que você quer. Minhas primeiras tentativas seriam ao longo da linha de

wget -m -I bar1/bar2 -X "*" http://www.foo.com/bar1/bar2/bar3/index.html

Explicação das opções:

-m: 
   --mirror
       Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets
       infinite recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l
       inf --no-remove-listing.
-I: list
   --include-directories=list
       Specify a comma-separated list of directories you wish to follow when downloading.  Elements of
       list may contain wildcards.
-X: list
   --exclude-directories=list
       Specify a comma-separated list of directories you wish to exclude from download.  Elements of list
       may contain wildcards.
    
por 16.12.2011 / 10:22
3

Você precisa adicionar um final / ao URL, senão você não conseguirá o que deseja.

Se você deseja obter todo o conteúdo em www.myhostname.com/somedirectory , a sintaxe deve ser como:

wget -r -nH http://www.myhostname.com/somedirectory/

Experimente sem o final / e veja o que acontece. Então tente com o /.

    
por 11.04.2012 / 13:06
1

Talvez eu esteja sentindo falta de algo, mas se é isso que você quer, então

wget -c -np -r www.foo.com/bar1/bar2

funciona para mim (usando o seu exemplo). Claro que, com essas opções, você obterá toda a estrutura de diretórios acima disso, de www.foo.com para baixo. Se você quiser apenas bar2 no nível superior, faça

wget -c -np -r -nH --cut-dirs=1 www.foo.com/bar1/bar2

-nH livra-se do www.foo.com e --cut-dirs=1 elimina bar1 , pelo que obterá bar2 e os seus subdirectórios transferidos para o directório actual. Para mais informações, consulte man wget , que é bastante legível e tem exemplos.

    
por 16.12.2011 / 04:00
1

Acho que a resposta correta aqui é a opção --no-parent :

   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.
       This is a useful option, since it guarantees that only the files below
       a certain hierarchy will be downloaded.
    
por 07.03.2015 / 08:01