Usando wget para buscar recursivamente um diretório com arquivos arbitrários nele

StackOverflow https://stackoverflow.com/questions/273743

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu tenho um diretório web, onde eu armazenar alguns arquivos de configuração. Eu gostaria de usar wget para puxar esses arquivos para baixo e manter sua estrutura atual. Por exemplo, o diretório olhares remotas como:

http://mysite.com/configs/.vim/

.vim detém vários arquivos e diretórios. Eu quero replicar que no cliente usando wget. Não consigo encontrar a combinação certa de bandeiras wget para obter este feito. Alguma idéia?

Foi útil?

Solução

Você tem que passar a opção -np / --no-parent para wget (além -r / --recursive, é claro), caso contrário ele irá seguir o link no índice do diretório no meu site para o diretório pai. Então o comando ficaria assim:

wget --recursive --no-parent http://example.com/configs/.vim/

Para evitar o download de arquivos index.html gerados automaticamente, use a opção -R / --reject:

wget -r -np -R "index.html*" http://example.com/configs/.vim/

Outras dicas

Para baixar um diretório de forma recursiva, que rejeita arquivos * index.html e downloads sem o nome do host, diretório pai e toda a estrutura de diretórios:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

Para qualquer outra pessoa que ter problemas semelhantes. Wget segue robots.txt que pode não permitir que você pegue o site. Não se preocupe, você pode desligá-lo:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node /Robot-Exclusion.html

Você deve usar o -m (espelho) flag, como que tem o cuidado de não mexer com timestamps e recurse indefinidamente.

wget -m http://example.com/configs/.vim/

Se você adicionar os pontos mencionados por outros neste tópico, seria:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

Aqui está o comando completo wget que funcionou para mim para baixar arquivos a partir do diretório de um servidor (ignorando robots.txt):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

Se --no-parent não ajuda, você pode opção --include usar.

Diretório struct:

http://<host>/downloads/good
http://<host>/downloads/bad

E deseja baixar downloads/good mas não diretório downloads/bad:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good
wget -r http://mysite.com/configs/.vim/

funciona para mim.

Talvez você tenha um .wgetrc que está interferindo com ele?

Para buscar um diretório de forma recursiva com nome de usuário e senha, utilize o seguinte comando:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

Tudo que você precisa é de duas bandeiras, uma é "-r" para recursão e "--no-parent" (ou -np) para não ir na '.' e "..". Como esta:

wget -r --no-parent http://example.com/configs/.vim/

É isso. Ele irá baixar na árvore local seguinte: ./example.com/configs/.vim. No entanto, se você não quer que os dois primeiros diretórios, em seguida, usar o --cut-dirs=2 bandeira adicional, tal como sugerido nas respostas anteriores:

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

E ele irá baixar a sua árvore de arquivo somente em ./.vim/

Na verdade, eu tenho a primeira linha a partir desta resposta precisamente a partir do wget manual do , eles têm um exemplo muito limpo no final da secção 4.3.

Você deve ser capaz de fazê-lo simplesmente adicionando um -r

wget -r http://stackoverflow.com/

Wget 1,18 pode funcionar melhor, por exemplo, eu fui mordido por uma versão 1.12 bug onde ...

wget --recursive (...)

... somente recupera index.html em vez de todos os arquivos.

Solução alternativa era a notar algumas 301 redirecionamentos e experimentar a nova localização -. Dado o novo URL, wget tem todos os arquivos no diretório

Esta versão de downloads de forma recursiva e não cria diretórios pai.

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

Uso:

  1. Adicionar a ~/.bashrc ou cole no terminal
  2. wgetod "http://example.com/x/"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top