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
Sourav
la source

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
la source
@ 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.

meawoppl
la source
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
10
xargs -i wget 'http://{}'  < your_list
Florian Diesch
la source
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

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

où list.txt est votre fichier de liste

flo
la source
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é
Vie de rue
la source
1

Fichier de lien links.txt

Commande de téléchargement de tous les liens

cat links.txt | wget -i
DreamCoder
la source
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.

Kyle Felipe
la source