Télécharger des fichiers à partir d'une liste


130

Comment puis-je télécharger des fichiers (qui sont répertoriés dans un fichier texte) en utilisant wgetou d'une autre manière automatique?

Exemple de liste de fichiers:

www.example.com/1.pdf
www.example.com/2.pdf
www.example.com/3.pdf

Réponses:


227

wget a un drapeau intégré pour ceci: wget -i your_list Vous pouvez trouver ce genre de chose en lisantman wget


@ aureianimus si je veux sauter le lien 2 alors comment?
Alhelal

Cette solution a fonctionné pour moi. J'étais heureux avec le téléchargement séquentiel et non en parallèle.
asiby

85

Obtenez-les en parallèle avec

cat urlfile | parallel --gnu "wget {}"

Par défaut, il exécutera autant de processus que de cœurs. Vous pouvez probablement le multiplier par 10 si vous voulez vraiment le réduire rapidement en ajoutant "-j 20" après le parallèle.


1
Pour ma part, je ne peux tout simplement pas le faire fonctionner. Je ne vois pas de procs engendré, changer d'écho pour wget n'émet rien
Jakub Bochenski

Certains ubuntus précédents ont un défaut stupide dans cet espace: stackoverflow.com/questions/16448887/…
meawoppl

2
Notez que "le nombre de processus exécutés dépend du nombre de cœurs" - la bande passante du réseau sera probablement un facteur limitant.
Wilf

2
Ça dépend vraiment. Pour un grand nombre de petits fichiers, cela peut être presque un ordre de grandeur plus rapide, car la plus grande partie du temps de transfert est constituée de la poignée de main / aller-retour TCP. De même, dans le cas où vous effectuez un téléchargement à partir d'un certain nombre d'hôtes plus petits, la bande passante par connexion est parfois limitée, ce qui ralentit considérablement les choses.
Meawoppl

2
Ceci est très utile si vous souhaitez utiliser une liste d'URL relatives (ID de ressource sans nom d'hôte) avec des noms d'hôte différents, par exemple: cat urlfile | parallèle --gnu "wget example1.com {}" et cat urlfile | parallèle --gnu "wget example2.com {}"
Mauricio Sánchez


9

parallela un flag intégré --arg-file( -a) qui utilisera un fichier d'entrée comme source, afin que vous puissiez l'éviter cat |. Vous pouvez utiliser

parallel --gnu -a urlfile wget

Ou simplement parallel --gnu wget < urlfile


5
awk '{print "http://" $0;}' list.txt | xargs -l1 wget

où list.txt est votre fichier de liste


4

J'ai vu la réponse de Florian Diesch.

Je l'ai fait fonctionner en incluant le paramètre bqcdans la commande.

xargs -i wget -bqc 'http://{}' < download.txt

Tous les téléchargements ont commencé en parallèle en arrière-plan.

  • -b: Contexte. Aller au fond immédiatement après le début
  • -q: Silencieux. Désactiver la sortie de wget
  • -c: Continuez. Continuer à obtenir un fichier partiellement téléchargé

1

Fichier de lien links.txt

Commande de téléchargement de tous les liens

cat links.txt | wget -i

3
Cela ne fonctionne pas. wget -i links.txtest la bonne commande.
Hery

Non ce n'est pas la bonne commande. La bonne commande est la suivante: "cat links.txt | wget -i"
DreamCoder le

0

Je viens de tester ceci:

xargs -a download_file -L1 wget

Ça marche pour moi. Les liens à l'intérieur du fichier txt doivent figurer sur des lignes séparées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.