Scarica i file da un elenco


130

Come posso scaricare file (che sono elencati in un file di testo) usando wgeto in qualche altro modo automatico?

Elenco dei file di esempio:

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

Risposte:


227

wget ha un flag incorporato per questo: wget -i your_list puoi trovare questo tipo di cose leggendoman wget


@aureianimus se voglio saltare il link 2 allora come?
alhelal,

Questa soluzione ha funzionato per me. Sono stato contento di averlo scaricato in sequenza e non in parallelo.
asiby,

85

Mettili in parallelo con

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

Per impostazione predefinita, eseguirà tutti i processi che hai i core, probabilmente puoi aumentarlo di altri 10x se vuoi davvero abbatterli rapidamente aggiungendo "-j 20" dopo il parallelo.


1
Io per uno non riesco proprio a farlo funzionare. Non vedo alcun proc generato, il cambio di eco per wget non genera nulla
Jakub Bochenski,

Alcuni ubuntus precedenti hanno un difetto muto in questo spazio: stackoverflow.com/questions/16448887/...
meawoppl

2
Nota con "eseguirà tutti i processi che hai dei core" - la larghezza di banda della rete sarà probabilmente un fattore limitante.
Wilf,

2
Dipende davvero. Per un gran numero di file di piccole dimensioni questo può essere quasi un ordine di grandezza più veloce, poiché la maggior parte del tempo di trasferimento è l'handshake / TCP round trip. Anche nella situazione in cui stai scaricando da un numero di host più piccoli, a volte la larghezza di banda per connessione è limitata, quindi questo aumenterà le cose.
meawoppl,

2
Ciò è molto utile se si desidera utilizzare un elenco di URL relativi (ID risorsa senza nomi host) con nomi host diversi, ad esempio cat urlfile | parallel --gnu "wget example1.com {}" e cat urlfile | parallel --gnu "wget example2.com {}"
Mauricio Sánchez


9

parallelha un flag incorporato --arg-file( -a) che utilizzerà un file di input come sorgente, in modo da poterlo evitare cat |. Puoi usare

parallel --gnu -a urlfile wget

O semplicemente parallel --gnu wget < urlfile


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

dove list.txt è il file dell'elenco


4

Ho visto la risposta di Florian Diesch.

L'ho fatto funzionare includendo il parametro bqcnel comando.

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

Tutti i download sono iniziati in parallelo in background.

  • -b: Sfondo. Passa allo sfondo immediatamente dopo l'avvio
  • -q: Silenzioso. Disattiva l'output di wget
  • -c: Continua. Continua a ottenere un file parzialmente scaricato

1

Link file links.txt

Comando per scaricare tutti i file dei collegamenti

cat links.txt | wget -i

3
Questo non funziona. wget -i links.txtè il comando giusto.
Hery,

No, questo non è il comando giusto. Il comando giusto è questo: "cat links.txt | wget -i"
DreamCoder

0

Ho appena provato questo:

xargs -a download_file -L1 wget

Per me funziona. I collegamenti all'interno del file txt devono essere in righe separate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.