web-dev-qa-db-fra.com

Utilisation de caractères génériques dans une requête wget ou curl

Est-il possible d'utiliser des caractères génériques dans les requêtes wget lors du téléchargement à partir de répertoires? En gros, j'ai un site, disons, www.download.example.com/dir/version/package.rpm. Cependant, le répertoire des versions change tout le temps et contient parfois plusieurs packages RPM. Existe-t-il une seule requête wget qui ne me procurerait que tous les packages du répertoire version sans savoir quelle est cette version? Dans mon monde idéal, la requête serait quelque chose comme:

wget www.download.example.com/dir/*/*.rpm

S'il existe un moyen de le faire avec curl, cela fonctionnerait également.

23
mart1n

Vous ne pouvez pas utiliser de caractères génériques dans wget mais le -A le drapeau devrait fonctionner. Depuis la page de manuel wget :

Vous souhaitez télécharger tous les gifs d'un répertoire sur un serveur http. Tu as essayé wget http://www.server.com/dir/*.gif, mais cela n'a pas fonctionné car la récupération http ne prend pas en charge la globalisation. Dans ce cas, utilisez: wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

Edit: a trouvé un question connexe

Concernant les répertoires:

Il existe un utilitaire appelé LFTP , qui prend en charge la globalisation. Jetez un œil à la page de manuel . Il y a un autre question sur Linux et Unix qui couvre son utilisation dans un scénario similaire au vôtre.

29
user2062950

Si vous pouvez trouver un modèle dans votre requête, vous pouvez utiliser l'extension d'accolade bash pour effectuer cette tâche.

Par exemple, dans votre cas, vous pouvez utiliser quelque chose comme:

wget www.download.example.com/dir/{version,old}/package{00..99}.rpm

Vous pouvez également combiner cela avec le -A et -R paramètres pour filtrer vos résultats.

10
Ivan

Bien que le type de solution ci-dessus fonctionne, il échoue lorsque vous souhaitez simplement télécharger certains répertoires, mais pas tous. Par exemple si vous avez:

http://site.io/like/
http://site.io/like2/
http://site.io/nolike/

Au lieu de cela, mettez les noms de répertoire que vous voulez dans un fichier texte, par exemple: dirs.txt:

like/
like2/

Utilisez ensuite wget avec les options de commande suivantes -i dirs.txt -B <base-URL> ainsi:

wget -nH -nc -np -r -e robots=off -R "index.html*" -i dirs.txt -B http://site.io/

Depuis, je ne pense pas que vous puissiez utiliser des répertoires dans le -A et -R listes. (?)

1
not2qubit