62 votes

CURL pour télécharger un répertoire

J'essaie de télécharger un répertoire complet de sites Web en utilisant CURL. La commande suivante ne fonctionne pas :

curl -LO http://example.com/

Il renvoie une erreur : curl: Remote file name has no length! .

Mais quand je fais ça : curl -LO http://example.com/someFile.type cela fonctionne. Une idée sur la façon de télécharger tous les fichiers dans le répertoire spécifié ? Merci.

72voto

StanleyZheng Points 821

Cela fonctionne toujours pour moi, sans parent et de manière récursive pour n'obtenir que le répertoire souhaité.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

34voto

HTTP n'a pas vraiment de notion de répertoire. Les barres obliques autres que les trois premières ( http://example.com/ ) n'ont pas de signification particulière, sauf en ce qui concerne les éléments suivants .. dans les URL relatives. Donc, à moins que le serveur ne suive un format particulier, il n'y a aucun moyen de "télécharger tous les fichiers dans le répertoire spécifié".

Si vous souhaitez télécharger l'ensemble du site, le mieux est de parcourir tous les liens de la page principale de manière récursive. Curl ne peut pas le faire, mais wget le peut. Cela fonctionnera si le site n'est pas trop dynamique (en particulier, wget ne verra pas les liens qui sont construits par du code Javascript). Commencez avec wget -r http://example.com/ et consultez les rubriques "Options de récupération récursive" et "Options d'acceptation/de rejet récursif" dans le manuel wget pour obtenir des options plus pertinentes (profondeur de récursion, listes d'exclusion, etc.).

Si le site web tente de bloquer les téléchargements automatiques, vous devrez peut-être modifier la chaîne de l'agent utilisateur ( -U Mozilla ), et d'ignorer robots.txt (créer un fichier vide example.com/robots.txt et utiliser le -nc pour que wget n'essaie pas de le télécharger depuis le serveur).

22voto

Dans ce cas, curl n'est PAS le meilleur outil. Vous pouvez utiliser wget avec le -r argument, comme ceci :

wget -r http://example.com/ 

Il s'agit de la forme la plus basique, et vous pouvez également utiliser des arguments supplémentaires. Pour plus d'informations, consultez le manpage ( man wget ).

7voto

Brad Points 5205

Ce n'est pas possible. Il n'existe aucun moyen standard, généralement mis en œuvre, pour qu'un serveur web vous renvoie le contenu d'un répertoire. La plupart des serveurs génèrent un index HTML d'un répertoire, s'ils sont configurés pour le faire, mais cette sortie n'est pas standard et n'est en aucun cas garantie. Vous pouvez analyser ce HTML, mais gardez à l'esprit que le format change d'un serveur à l'autre et qu'il n'est pas toujours activé.

3voto

Asdf Points 31

Vous pouvez utiliser l'extension Firefox DownThemAll ! Elle vous permettra de télécharger tous les fichiers d'un répertoire en un seul clic. Elle est également personnalisable et vous pouvez spécifier les types de fichiers à télécharger. C'est la méthode la plus simple que j'ai trouvée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X