web-dev-qa-db-fra.com

Utiliser wget pour extraire récursivement un répertoire contenant des fichiers arbitraires

J'ai un répertoire Web où je stocke des fichiers de configuration. J'aimerais utiliser wget pour extraire ces fichiers et conserver leur structure actuelle. Par exemple, le répertoire distant ressemble à:

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

.vim contient plusieurs fichiers et répertoires. Je veux reproduire cela sur le client en utilisant wget. Je n'arrive pas à trouver le bon combo de drapeaux wget pour le faire. Des idées?

532
jerodsanto

Vous devez passer l'option -np/--no-parent à wget (en plus de -r/--recursive, bien sûr), sinon il suivra le lien dans l'index du répertoire sur mon site au répertoire parent. Donc, la commande ressemblerait à ceci:

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

Pour éviter de télécharger les fichiers index.html générés automatiquement, utilisez l'option -R/--reject:

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

Pour télécharger un répertoire de manière récursive, qui rejette les fichiers index.html * et les télécharge sans le nom d'hôte, le répertoire parent et la structure de répertoires complète:

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

Pour quiconque ayant des problèmes similaires. Wget suit robots.txt qui pourrait ne pas vous permettre de saisir le site. Pas de soucis, vous pouvez l'éteindre:

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

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

112
Sean Villani

Vous devriez utiliser le drapeau -m (miroir), car cela évite de gâcher l'horodatage et de déclencher une récidive indéfiniment.

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

Si vous ajoutez les points mentionnés par d'autres dans ce fil, ce serait:

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

Voici la commande complète wget qui m'a permis de télécharger des fichiers depuis le répertoire d'un serveur (en ignorant 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/
31
Erich Eichinger

Si --no-parent ne vous aide pas, vous pouvez utiliser l'option --include.

Structure du répertoire:

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

Et vous voulez télécharger le répertoire downloads/good mais pas downloads/bad:

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

travaille pour moi.

Peut-être avez-vous un fichier .wgetrc qui interfère avec cela?

5

Pour extraire un répertoire de manière récursive avec un nom d'utilisateur et un mot de passe, utilisez la commande suivante:

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

Tout ce dont vous avez besoin, c'est deux indicateurs, l'un est "-r" pour la récursivité et "--no-parent" (ou -np) afin de ne pas entrer dans '.' et "..". Comme ça:

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

C'est ça. Il sera téléchargé dans l'arborescence locale suivante: ./example.com/configs/.vim. Toutefois, si vous ne souhaitez pas utiliser les deux premiers répertoires, utilisez l'indicateur supplémentaire --cut-dirs=2 comme suggéré dans les réponses précédentes:

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

Et il téléchargera votre arborescence de fichiers uniquement dans ./.vim/

En fait, la première ligne de cette réponse provient précisément de wget manual , ils ont un exemple très clair vers la fin de la section 4.3.

2
Jordan Gee

Vous devriez pouvoir le faire simplement en ajoutant un -r

wget -r http://stackoverflow.com/
1
kasperjj

Cette version se télécharge de manière récursive et ne crée pas de répertoires parents.

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"
}

Usage:

  1. Ajouter à ~/.bashrc ou coller dans le terminal
  2. wgetod "http://example.com/x/"
1
rkok

Wget 1.18 peut mieux fonctionner, par exemple, je me suis fait piquer par un bogue de la version 1.12 où ...

wget --recursive (...)

... récupère uniquement index.html au lieu de tous les fichiers.

La solution de rechange consistait à remarquer 301 redirections et à essayer le nouvel emplacement - compte tenu de la nouvelle URL, wget a obtenu tous les fichiers du répertoire.

1
devon