Newsgroup: it.comp.os.linux.sys
Titolo: scaricamento ricorsivo con wget

Sto tentando di effettuare uno scaricamento ricorsivo da un server ftp
con wget.
Il fatto è che wget lanciato con le opzioni per il retry, se sta
scaricando un file singolo e lo scaricamento si interrompe, ritenta la
connessione e riprende lo scaricamento del file da dove era rimasto;
se invece viene lanciato per lo scaricamento ricorsivo, anche se ci
sono le opzioni per il retry, se si interrompe lo scaricamento di un
file, lo lascia incompleto e continua col successivo.
Siccome questo server è molto problematico e la connessione cade un
sacco di volte, il risultato finale è che le sottodirectory e i file
vengono scaricati tutti, però molti file sono incompleti e quindi
illeggibili.
C'è modo di lanciare wget col retry *VERO*, che valga per ogni singolo
file, anche in modalità ricorsiva? Le sottidirectory e i file sono
troppi per poterli scaricare uno ad uno.
la riga di comando che uso è:
$ wget -c -t0 -T2 -r -l0 --retry-connrefused 
ftp://ftp.sitoinquestione.esempio/blabla/yadayada/
notare che, stando all'help di wget, "-t0" significa "numero di
tentativi illimitati" e "-l0" significa "profondità massima di
ricorsione illimitata".
Idee?

 $ wget -c -t0 -T2 -r -l0 --retry-connrefused 
ftp://ftp.sitoinquestione.esempio/blabla/yadayada/
non mi sono mai trovato in una situazione del genere, e non pensavoi ad un
comportamento del genere.
se esiste un modo per risolvere col solo wget non saprei, mi viene in
mente un metodo per mettere una pezza, usa wget all'interno di uno script
che cancella l'ulitmo file se non l'hai finito di scaricare completamente.
č un metodo che puo' essere valido se la grandezza dei singoli file non
č esagerata, altrimenti ciccia.
altro metodo, cambia compagnia telefonica!

$ wget -c -t0 -T2 -r -l0 --retry-connrefused 
ftp://ftp.sitoinquestione.esempio/blabla/yadayada/
A me invece non me l'ha fatto, anzi spesso lo interrompo anch'io con
ctrl-C diverse volte, quando riprende controlla velocissimo e riparte
dal file interrotto per terminarlo.
(l'ho appena rifatto anche un momento fa con ctrl-C apposta)
Il comando che do per il mirror e' questo:
$ wget -c -r --no-parent http://......../DIRECTORY
guarda anche che la Debian consiglia http invece di ftp per siti che
possono dare problemi.
Tanto per dire, anche apt mi sa che usa wget e li' figurati il troiaio
che succederebbe se facesse questo che dici, e che sta facendo a te.
-- 
Ciao Minotto


Usa l'opzione --mirror.  In questo modo ad ogni passaggio verifica sia 
la data che la dimensione.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 la data che la dimensione.
Grazie per il consiglio.
Adesso proverò a lasciarlo scaricare e poi rilanciarlo per fargli
terminare tutti i file lasciati incompleti, a ripetizione fino a
quando li avrà completati tutti.
Chi la dura la vince. :)

 possono dare problemi.
lo farei volentieri ma il sito in questione è solo in ftp.

 la data che la dimensione.
Grazie per il consiglio.
Adesso proverò a lasciarlo scaricare e poi rilanciarlo per fargli
terminare tutti i file lasciati incompleti, a ripetizione fino a
quando li avrà completati tutti.
Chi la dura la vince. :)
PS: sto notando che lui in effetti RITENTA di scaricare il singolo
file, solo che da errore perché dice che non esiste... e continua col
successivo!!!
Quindi 'sto server ftp è talmente un colabrodo che ogni tanto si
"incarta" su un singolo file, perciò si blocca la connessione e al
tentativo successivo dice addirittura che il file non esiste...
Penoso ragazzi, penoso...

 Ma la lista di file da scaricare come la ottiene lo script?
premesso che dalle altree risposte ho capito che la colpa non è di wget,
ma del server (l'avevo detto che mi sembrava strano)
la "lista" non ti serve, solo il nome del file sul quale si è impallato,
e quello lo ricavi dall'ouput di wget, che devi opportunamente
interpretare (lanciando wget tramite popen)
es: prendo un pezzo di output di wget -r 
www.google.it
 (le righe le
nomino io)
1 --12:49:30-- 
http://www.google.it/robots.txt
2           => `
www.google.it/robots.txt
'
3 Connessione a 
www.google.it
|209.85.135.99:80... connesso. HTTP richiesta
4 inviata, aspetto la risposta... 200 OK Lunghezza: non specificato
5 [text/plain]
6  [ <=>                     ] 2,752         --.--K/s
7 12:49:30 (262.91 KB/s) - "
www.google.it/robots.txt
" salvato [2752]
alla riga 2 sai il nome del file che stai scaricando (wget ti crea prorio
dalla posizione da dove l'hai lanciato :./
www.google.it/robots.txt
)
quindi se wget muore prima di essere arrivato alla linea 7, cancelli il
file, ed alla prossima chiamata quel file risulterà da scaricare.
cmq siamo OT

cioè intendi quando rilanci il comando?
Si' certo, se invece cade la linea lui resta in attesa (e la console
non e' disponibile) e poi riprende da solo.
Per dire, iceweasel coi dvd della Debian ha interrotto e poi non e'
stato piu' in grado di recuperare... e poi - sara' un'idea mia - ma
mi sembra piu' veloce wget, credo che sia il migliore in assoluto.
-- 
Ciao Minotto