2011-01-20 17 views

risposta

2

Bene, è sempre possibile eseguire più istanze di wget, no?

Esempio:

wget -r http://somesite.example.org/ & 
wget -r http://othersite.example.net/ & 

ecc Questa sintassi funziona in qualsiasi ambiente Unix (ad esempio Linux o MacOS); non sono sicuro di come farlo in Windows.

Wget stesso non supporta operazioni con multithreading - almeno, né lo manpage né lo its website ne parlano. In ogni caso, dal momento che wget supporta HTTP keepalive, il collo di bottiglia è solitamente la larghezza di banda della connessione, non il numero di download simultanei.

+0

'wget -r --child 100 http: // site.com' sta cercando qualcosa di simile. – c2h2

+0

@ c2h2: secondo la manpage di wget (http://linux.die.net/man/1/wget) e i documenti di wget sul suo sito web (http://www.gnu.org/software/wget/manual/wget .html), non esiste tale opzione (o qualcosa di simile) - 'wget' è single-threaded. Scusate. – Piskvor

+0

grazie! lo pensavo anch'io. – c2h2

8

Ho trovato una soluzione decente.

Leggi originale a http://www.linuxquestions.org/questions/linux-networking-3/wget-multi-threaded-downloading-457375/

wget -r -np -N [url] & 
wget -r -np -N [url] & 
wget -r -np -N [url] & 
wget -r -np -N [url] & 

copiata tutte le volte che si ritengono montaggio di avere tanto i processi download. Questo non è elegante come un'applicazione correttamente multithreaded, ma farà il lavoro con solo una piccola quantità di spese. la chiave qui è l'interruttore "-N". Questo significa trasferire il file solo se è più recente di quello che si trova sul disco. Ciò impedirà (per lo più) a di scaricare dal processo stesso lo stesso file con un altro processo già scaricato, ma salta il file e scarica ciò che altri processi non hanno scaricato. Usa il timestamp come mezzo per fare questo, quindi il leggero overhead.

Funziona perfettamente per me e consente di risparmiare molto tempo. Non avere troppi processi in quanto ciò potrebbe saturare la connessione del sito web e spuntare il proprietario . Mantengalo intorno a un massimo di 4 o così. Tuttavia, il numero è limitato solo dalla CPU e dalla larghezza di banda della rete su entrambe le estremità.

+0

wow dovrebbe funzionare, darò una prova – c2h2

+0

ha fatto questo lavoro per voi? Lo sto usando su due server senza problemi fino ad ora. – Julian

3

Usa axel per scaricare con i multi connessioni

apt-get install axel 

axel http://example.com/file.zip 
+0

o aget http://www.enderunix.org/aget/ ma queste non sono soluzioni ricorsive (buono per altri ppl che hanno ottenuto questa domanda cercandone uno) – Orwellophile

5

Con l'uso di wget parallele utilizzando l'interruttore di xargs, questa soluzione sembra molto meglio:

https://stackoverflow.com/a/11850469/1647809

+0

È buono solo quando si conoscono tutti gli URL scaricabili in avanzare.Questo non è il caso quando si desidera eseguire il mirroring di un sito. – Ray

Problemi correlati