Comment télécharger le répertoire HTTP avec tous les fichiers et sous-répertoires tels qu'ils apparaissent sur la liste des fichiers / dossiers en ligne?

189

Il existe un répertoire HTTP en ligne auquel j'ai accès. J'ai essayé de télécharger tous les sous-répertoires et fichiers via wget. Mais, le problème est que lors du wgettéléchargement de sous-répertoires, il télécharge le index.htmlfichier qui contient la liste des fichiers dans ce répertoire sans télécharger les fichiers eux-mêmes.

Existe-t-il un moyen de télécharger les sous-répertoires et les fichiers sans limite de profondeur (comme si le répertoire que je souhaite télécharger est juste un dossier que je souhaite copier sur mon ordinateur).

répertoire HTTP en ligne

Omar
la source

Réponses:

357

Solution:

wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

Explication:

  • Il téléchargera tous les fichiers et sous-dossiers dans le répertoire ddd
  • -r : récursivement
  • -np: ne pas aller dans les répertoires supérieurs, comme ccc /…
  • -nH : ne pas enregistrer les fichiers dans le dossier du nom d'hôte
  • --cut-dirs=3: mais enregistrez-le dans ddd en omettant les 3 premiers dossiers aaa , bbb , ccc
  • -R index.html: exclusion des fichiers index.html

Référence: http://bmwieczorek.wordpress.com/2008/10/01/wget-recursively-download-all-files-from-certain-directory-listed-by-apache/

Mingjiang Shi
la source
17
Je vous remercie! En outre, votre information selon ce que vous pouvez utiliser -Rcomme -R cssexclure tous les fichiers CSS, ou utiliser -Acomme -A pdfdes fichiers uniquement télécharger PDF.
John
7
Merci! Conseils supplémentaires tirés de la page de manuel wget When downloading from Internet servers, consider using the ‘-w’ option to introduce a delay between accesses to the server. The download will take a while longer, but the server administrator will not be alarmed by your rudeness.
jgrump2012
3
J'obtiens cette erreur «wget» n'est pas reconnue comme une commande interne ou externe, un programme utilisable ou un fichier de commandes.
hamish
1
@hamish vous devrez peut-être d'abord installer wget ou le wget n'est pas dans votre $ PATH.
Mingjiang Shi
16
Excellente réponse, mais notez que s'il y a un robots.txtfichier interdisant le téléchargement de fichiers dans le répertoire, cela ne fonctionnera pas. Dans ce cas, vous devez ajouter -e robots=off . Voir unix.stackexchange.com/a/252564/10312
Daniel Hershcovich
45

J'ai pu faire fonctionner cela grâce à cet article utilisant VisualWGet . Cela a très bien fonctionné pour moi. L'important semble être de vérifier le -recursivedrapeau (voir image).

On a également constaté que le -no-parentdrapeau est important, sinon il essaiera de tout télécharger.

entrez la description de l'image ici entrez la description de l'image ici

mateuscb
la source
2
Je viens de trouver ceci - décembre 2017. Cela fonctionne bien. Je l'ai eu sur sourceforge.net/projects/visualwget
SDsolar
2
A bien fonctionné sur la machine Windows, n'oubliez pas de vérifier les options mentionnées dans la réponse, sinon cela ne fonctionnera pas
csharpcoder
Ne fonctionne pas avec certains https. @DaveLucre si vous avez essayé avec wget dans la solution cmd, vous pourrez également le télécharger, mais certains serveurs ne le permettent pas, je suppose
Yannis Dran
que fait vérifié --no-parent?
T.Todua
1
Travailler en mars 2020!
Mr Programmer
7
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

De man wget

'-r' '--recursive' Active la récupération récursive. Voir Téléchargement récursif, pour plus de détails. La profondeur maximale par défaut est de 5.

'-np' '--no-parent' Ne monte jamais dans le répertoire parent lors de la récupération récursive. C'est une option utile, car elle garantit que seuls les fichiers situés sous une certaine hiérarchie seront téléchargés. Voir Limites basées sur l'annuaire, pour plus de détails.

'-nH' '--no-host-directory' Désactive la génération de répertoires avec préfixe d'hôte. Par défaut, appeler Wget avec '-r http://fly.srk.fer.hr/ ' créera une structure de répertoires commençant par fly.srk.fer.hr/. Cette option désactive ce comportement.

'--cut-dirs = number' Ignore les composants du répertoire numérique. Ceci est utile pour obtenir un contrôle fin sur le répertoire où la récupération récursive sera enregistrée.

Prenons, par exemple, le répertoire « ftp://ftp.xemacs.org/pub/xemacs/ ». Si vous le récupérez avec «-r», il sera enregistré localement sous ftp.xemacs.org/pub/xemacs/. Bien que l'option '-nH' puisse supprimer la partie ftp.xemacs.org/, vous êtes toujours bloqué avec pub / xemacs. C'est là que «--cut-dirs» est utile; cela empêche Wget de «voir» les composants du répertoire distant. Voici plusieurs exemples du fonctionnement de l'option '--cut-dirs'.

Aucune option -> ftp.xemacs.org/pub/xemacs/ -nH -> pub / xemacs / -nH --cut-dirs = 1 -> xemacs / -nH --cut-dirs = 2 ->.

--cut-dirs = 1 -> ftp.xemacs.org/xemacs/ ... Si vous voulez simplement vous débarrasser de la structure des répertoires, cette option est similaire à une combinaison de '-nd' et '-P'. Cependant, contrairement à «-nd», «--cut-dirs» ne perd pas avec les sous-répertoires - par exemple, avec «-nH --cut-dirs = 1», un sous-répertoire beta / sera placé dans xemacs / beta, comme on pourrait s'y attendre.

Natalie Ng
la source
3
Certaines explications seraient super.
Benoît Latinier
Qu'en est-il du téléchargement d'un type de fichier spécifique à l' aide de VisualWget ? Est-il possible de télécharger uniquement des fichiers mp3 dans un répertoire et ses sous-répertoires dans VisualWget ?
Jason
3

wgetest une ressource inestimable et quelque chose que j'utilise moi-même. Cependant, parfois, il y a des caractères dans l'adresse qui wgets'identifient comme des erreurs de syntaxe. Je suis sûr qu'il y a une solution à cela, mais comme cette question ne posait pas spécifiquement sur, wgetj'ai pensé que je proposerais une alternative aux personnes qui tomberont sans aucun doute sur cette page à la recherche d'une solution rapide sans courbe d'apprentissage requise.

Il existe quelques extensions de navigateur qui peuvent le faire, mais la plupart nécessitent l'installation de gestionnaires de téléchargement, qui ne sont pas toujours gratuits, ont tendance à être une horreur et utilisent beaucoup de ressources. Voici celui qui n'a aucun de ces inconvénients:

"Download Master" est une extension pour Google Chrome qui fonctionne très bien pour le téléchargement à partir de répertoires. Vous pouvez choisir de filtrer les types de fichiers à télécharger ou de télécharger l'intégralité du répertoire.

https://chrome.google.com/webstore/detail/download-master/dljdacfojgikogldjffnkdcielnklkce

Pour une liste des fonctionnalités à jour et d'autres informations, visitez la page du projet sur le blog du développeur:

http://monadownloadmaster.blogspot.com/

Moscarda
la source
3

vous pouvez utiliser lftp, le couteau de l'armée du téléchargement si vous avez des fichiers plus volumineux que vous pouvez ajouter --use-pget-n=10à la commande

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'
nwgat
la source
fonctionnait parfaitement et très rapidement, cela a maximisé ma ligne Internet en téléchargeant des milliers de petits fichiers. Très bien.
n13
fonctionne parfaitement !! la meilleure option!
ambigus9 il y a
2

Aucun logiciel ou plug-in requis!

(utilisable uniquement si vous n'avez pas besoin de profondeur récursive)

Utilisez bookmarklet. Faites glisser ce lien dans les favoris, puis modifiez et collez ce code:

(function(){ var arr=[], l=document.links; var ext=prompt("select extension for download (all links containing that, will be downloaded.", ".mp3"); for(var i=0; i<l.length; i++) { if(l[i].href.indexOf(ext) !== false){ l[i].setAttribute("download",l[i].text); l[i].click(); } } })();

et allez sur la page (d'où vous voulez télécharger les fichiers), et cliquez sur ce bookmarklet.

T.Todua
la source
-1

wget fonctionne généralement de cette façon, mais certains sites peuvent avoir des problèmes et créer trop de fichiers html inutiles. Afin de faciliter ce travail et d'éviter la création de fichiers inutiles, je partage mon script getwebfolder, qui est le premier script Linux que j'ai écrit pour moi-même. Ce script télécharge tout le contenu d'un dossier Web saisi en paramètre.

Lorsque vous essayez de télécharger un dossier Web ouvert par wget qui contient plusieurs fichiers, wget télécharge un fichier nommé index.html. Ce fichier contient une liste de fichiers du dossier Web. Mon script convertit les noms de fichiers écrits dans le fichier index.html en adresses Web et les télécharge clairement avec wget.

Testé sur Ubuntu 18.04 et Kali Linux, il peut également fonctionner sur d'autres distributions.

Utilisation:

  • extraire le fichier getwebfolder du fichier zip fourni ci-dessous

  • chmod +x getwebfolder (seulement pour la première fois)

  • ./getwebfolder webfolder_URL

tel que ./getwebfolder http://example.com/example_folder/

Lien de téléchargement

Détails sur le blog

Octet amer
la source