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

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

  •  07-07-2019
  •  | 
  •  

Question

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?

Était-ce utile?

La solution

Vous devez passer l'option -np / - no-parent à wget (en plus de -r / - récursif , bien sûr), sinon il suivra le lien dans l'index du répertoire sur 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 / - rejette :

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

Autres conseils

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

Pour quiconque ayant des problèmes similaires. Wget suit robots.txt , ce 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

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

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

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

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

Voici la commande wget complète 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/

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 souhaitez télécharger le répertoire downloads / good mais pas le répertoire 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/

travaille pour moi.

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

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/

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

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 ne téléchargera votre arborescence de fichiers que dans ./. vim /

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

Vous devriez pouvoir le faire simplement en ajoutant un -r

wget -r http://stackoverflow.com/

Wget 1.18 fonctionnera peut-être mieux, par exemple, un bogue de la version 1.12 m'a piqué où ...

wget --recursive (...)

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

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

Cette version télécharge de manière récursive et ne crée pas de répertoires 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"
}

Utilisation:

  1. Ajouter à ~ / .bashrc ou coller dans le terminal
  2. wgetod & http: //exemple.com/x/"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top