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

Respuestas:


227

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


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


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


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


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

donde list.txt es su archivo de lista


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

1

Archivo de enlace links.txt

Comando para descargar todos los archivos de enlaces

cat links.txt | wget -i

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.