web-dev-qa-db-fra.com

Obtenir une liste de répertoires sur http

Il existe un répertoire qui est en cours de diffusion sur le réseau et que je souhaite surveiller. Son contenu est constitué de diverses versions du logiciel que j'utilise et j'aimerais écrire un script que je pourrais exécuter, qui vérifie ce qui est là et télécharge tout ce qui est plus récent que ce que j'ai déjà. 

Existe-t-il un moyen, par exemple avec wget ou autre, d’obtenir une liste de répertoires. J'ai essayé d'utiliser wget sur le répertoire, ce qui me donne le code HTML. Pour éviter d'avoir à analyser le document HTML, existe-t-il un moyen de récupérer une liste simple comme celle que ls donnerait?

12
ajwood

Je viens de trouver un moyen de le faire:

$ wget --spider -r --no-parent http://some.served.dir.ca/

C'est assez bavard, vous devez donc suivre grep plusieurs fois en fonction de ce que vous recherchez, mais toute l'information est là. Il semble que stderr soit imprimé, ajoutez donc 2>&1 pour laisser grep. Je me suis écrié pour que "\ .tar\.gz" trouve toutes les archives que le site avait à offrir.

Notez que wget écrit des fichiers temporaires dans le répertoire de travail et ne nettoie pas ses répertoires temporaires. Si cela pose un problème, vous pouvez passer à un répertoire temporaire: 

$ (cd /tmp && wget --spider -r --no-parent http://some.served.dir.ca/)
22
ajwood

Ce qui suit n'est pas récursif, mais cela a fonctionné pour moi:

$ curl -s https://www.kernel.org/pub/software/scm/git/

La sortie est HTML et est écrite dans stdout. Contrairement à wget, rien n’est écrit sur le disque.

-s (--silent) est pertinent lors du piping de la sortie, en particulier dans un script qui ne doit pas être bruyant.

Dans la mesure du possible, rappelez-vous de ne pas utiliser ftp ou http au lieu de https.

2
A-B-B

Ce que vous demandez le mieux servi par FTP, et non par HTTP.

HTTP n'a pas de concept de liste de répertoires, mais FTP.

La plupart des serveurs HTTP n'autorisent pas l'accès aux listes de répertoires, et ceux qui le font sont une fonctionnalité du serveur, pas le protocole HTTP. Pour ces serveurs HTTP, ils décident de générer et d'envoyer une page HTML pour la consommation humaine , pas la consommation machine . Vous n'avez aucun contrôle sur cela et n'auriez d'autre choix que d'analyser le code HTML.

FTP est conçu pour la consommation de machines, plus particulièrement avec l’introduction des commandes MLST et MLSD qui remplacent la commande ambiguë LIST.

1
Remy Lebeau

S'il est servi par http, il n'y a aucun moyen d'obtenir une simple liste de répertoires. La liste que vous voyez lorsque vous y naviguez, celle que wget est en train de récupérer, est générée par le serveur Web sous forme de page HTML. Tout ce que vous pouvez faire est d’analyser cette page et d’extraire les informations.

1
Optimal Cynic

Autant que je sache, il n’ya aucun moyen d’obtenir une telle liste de répertoires pour des raisons de sécurité. Il est plutôt chanceux que votre répertoire cible contienne la liste HTML car il vous permet de l'analyser et de découvrir de nouveaux téléchargements.

0
Samuel