Usando wget para buscar recursivamente um diretório com arquivos arbitrários nele
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?
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:
- Adicionar a
~/.bashrc
ou cole no terminal -
wgetod "http://example.com/x/"