Risposte:
Il modo più comune per verificare l'integrità dei file scaricati è utilizzare i checksum MD5. Ciò presuppone che il sito che si sta scaricando dai checksum MD5 effettivamente pubblicati dei loro file. È possibile verificare un checksum MD5 creando il proprio checksum del file scaricato e confrontandolo con il checksum pubblicato. Se sono identici, il file scaricato è completo e non manomesso.
Se non ti aspetti che il file che stai scaricando cambi, puoi precompilare un checksum e codificarlo nello script, ma se il file viene mai aggiornato la verifica fallirà.
Per creare un checksum MD5 di un'esecuzione di file md5sum myFile
. Nel caso di wget potresti trovare utile questo comando, specialmente se il file che stai scaricando è grande:
wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM
.
Questo creerà un checksum di "myFile" durante il download e lo salverà nel file MD5SUM, risparmiando eventualmente un po 'di tempo.
Nel caso di una connessione interrotta, penso che il modo migliore sarebbe quello di controllare i codici di uscita di wget. Se il download ha esito positivo senza errori, verrà restituito wget 0
. Qualcos'altro indica che qualcosa è andato storto. Dai un'occhiata alla sezione "Stato di uscita" di man wget
.
Il codice di ritorno del comando utilizzato per scaricare il file ti dirà se il comando è stato eseguito correttamente o meno. In genere, un codice di ritorno pari a 0 indica successo e qualsiasi numero diverso da zero indica un errore. È possibile accedere al codice di ritorno tramite la $?
variabile.
Un esempio di base usando wget
sarebbe:
#!/bin/bash
wget foo.tgz &> /dev/null
if [[ "$?" != 0 ]]; then
echo "Error downloading file"
else
echo "Success"
fi
&> /dev/null
reindirizza tutto l'output di wget, /dev/null
quindi è l'ideale per lo scripting MA rende wget
più difficili gli errori di debug .
wget -q ... || { handle ; error ; }
man
durante la lettura per rispondere e le due cose che stavo per dire erano già qui in due risposte - quindi ho fatto due commenti. Bel tocco anche a te.
wget
potrebbe pensare che il download sia stato completato, anche se si è rotto. Inoltra informazioni su connessioni TCP interrotte e connessioni TCP chiuse, il che è problematico con HTTP poiché utilizza TCP chiuso come segno finale per impostazione predefinita. Ecco perché ho aggiunto un controllo se la dimensione del file dall'intestazione corrisponde alla dimensione del file scaricato quando ho eseguito un download di massa. Non sono sicuro se wget
tali controlli di coerenza o cosa dicono le specifiche http su questo problema.