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

J’ai un répertoire Web où je stocke des fichiers de configuration. Je voudrais 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 ensemble de drapeaux wget pour y arriver. Des idées?

Vous devez passer l’ -np / -np --no-parent à wget (en plus de -r / – --recursive , bien sûr), sinon, il suivra le lien dans l’index du répertoire de mon site vers le 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/ 

Pour télécharger un répertoire récursivement, qui rejette les fichiers index.html * et les téléchargements sans le nom d’hôte, le répertoire parent et la structure de répertoire complète:

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

Pour quiconque ayant des problèmes similaires. Wget suit le fichier robots.txt qui peut ne pas vous permettre de saisir le site. Pas de soucis, vous pouvez le désactiver:

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

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

Vous devriez utiliser le drapeau -m (miroir), car cela prend soin de ne pas jouer avec les horodatages et de se déclencher 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/ 

Voici la commande wget complète qui a fonctionné pour que je télécharge des fichiers à partir du répertoire d’un serveur (en ignorant le fichier 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/ 

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

Structure du répertoire:

 http:///downloads/good http:///downloads/bad 

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

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

travaille pour moi.

Vous avez peut-être un fichier .wgetrc qui interfère avec cela?

Pour récupérer un répertoire de manière récursive avec le nom d’utilisateur et le mot de passe, utilisez la commande suivante:

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

Wget 1.18 pourrait mieux fonctionner, par exemple, j’ai été mordu 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 contournement consistait à remarquer des redirections 301 et à essayer le nouvel emplacement – étant donné la nouvelle URL, wget a tous les fichiers dans le répertoire.

Vous devriez pouvoir le faire simplement en ajoutant un -r

 wget -r http://stackoverflow.com/ 

Cette version est téléchargée de manière récursive et ne crée pas de répertoire parent.

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

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

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

C’est tout. Il sera téléchargé dans l’arborescence locale suivante: ./example.com/configs/.vim . Cependant, si vous ne voulez pas 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 ne téléchargera votre arbre de fichiers que dans ./.vim/

En fait, j’ai obtenu la première ligne de cette réponse précisément à partir du manuel de wget , ils ont un exemple très clair vers la fin de la section 4.3.