Descargar archivos de una lista

130

¿Cómo puedo descargar archivos (que se enumeran en un archivo de texto) usando wgetu otra forma automática?

Lista de archivos de muestra:

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

Respuestas:

227

wget tiene un indicador incorporado para esto: wget -i your_list puede encontrar este tipo de cosas leyendoman wget

aureianimus
fuente
@aureianimus si quiero omitir el enlace 2, ¿cómo?
alhelal
Esta solución funcionó para mí. Estaba contento con la descarga secuencial y no en paralelo.
asiby
85

Ponlos en paralelo con

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

De manera predeterminada, ejecutará tantos procesos como núcleos, probablemente pueda aumentar esto 10 veces más si realmente desea eliminarlos rápidamente agregando "-j 20" después del paralelo.

meawoppl
fuente
1
Por mi parte, simplemente no puedo hacer que funcione. No veo ningún proceso generado, cambiar el eco por wget no
genera
Algunos ubuntus anteriores tienen un defecto tonto en este espacio: stackoverflow.com/questions/16448887/…
meawoppl
2
Tenga en cuenta que 'ejecutará tantos procesos como núcleos': el ancho de banda de la red probablemente será un factor más limitante.
Wilf
2
Realmente depende Para una gran cantidad de archivos pequeños, esto puede ser casi un orden de magnitud más rápido, ya que la mayor parte del tiempo de transferencia es el apretón de manos / TCP de ida y vuelta. También en la situación en la que está descargando desde varios hosts más pequeños, a veces el ancho de banda por conexión es limitado, por lo que esto aumentará las cosas.
meawoppl
2
Esto es bastante útil si desea utilizar una lista de URL relativas (ID de recurso sin nombres de host) con diferentes nombres de host, por ejemplo: cat urlfile | paralelo --gnu "wget example1.com {}" y cat urlfile | paralelo --gnu "wget example2.com {}"
Mauricio Sánchez
10
xargs -i wget 'http://{}'  < your_list
Florian Diesch
fuente
9

paralleltiene un indicador incorporado --arg-file( -a) que usará un archivo de entrada como fuente, por lo que puede evitarlo cat |. Puedes usar

parallel --gnu -a urlfile wget

O simplemente parallel --gnu wget < urlfile

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

donde list.txt es su archivo de lista

flo
fuente
4

Vi la respuesta de Florian Diesch.

Lo hice funcionar al incluir el parámetro bqcen el comando.

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

Todas las descargas comenzaron en paralelo en segundo plano.

  • -b: Antecedentes. Ir al fondo inmediatamente después del inicio
  • -q: Tranquilo. Desactiva la salida de wget
  • -c: Hacer continuación. Continuar obteniendo un archivo parcialmente descargado
vida de calle
fuente
1

Archivo de enlace links.txt

Comando para descargar todos los archivos de enlaces

cat links.txt | wget -i
DreamCoder
fuente
3
Esto no funciona. wget -i links.txtes el comando correcto
Hery
No, este no es el comando correcto. El comando correcto es este: "cat links.txt | wget -i"
DreamCoder
0

Acabo de probar esto:

xargs -a download_file -L1 wget

Esto funciona para mi. Los enlaces dentro del archivo txt deben estar en líneas separadas.

Kyle Felipe
fuente