Відповіді:
Найпоширеніший спосіб перевірити цілісність завантажених файлів - це використання контрольних сум MD5. Це передбачає, що сайт, який ви завантажуєте, з фактично опублікованих контрольних сум MD5 своїх файлів. Ви можете перевірити контрольну суму MD5, створивши власну контрольну суму завантаженого файлу та порівнявши його з опублікованою контрольною сумою. Якщо вони ідентичні, завантажений файл є повним і не підроблений.
Якщо ви не очікуєте, що файл, який ви завантажуєте, зміниться, ви можете попередньо обчислити контрольну суму та жорсткий код у сценарій, але якщо файл коли-небудь оновлюється, перевірка не вдасться.
Для створення контрольної суми MD5 файлу запустіть md5sum myFile
. У випадку wget ця команда може бути корисною, особливо якщо файл, який ви завантажуєте, великий:
wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM
.
Це створить контрольну суму "myFile" під час завантаження та збереже її у файл MD5SUM, можливо, заощадивши якийсь час.
У випадку перерваного з'єднання, я думаю, що найкращим способом було б перевірити вихідні коди wget. У разі успішного завантаження без помилок wget повернеться 0
. Все інше вказує на те, що щось пішло не так. Погляньте на розділ "Стан виходу" man wget
.
Код повернення команди, використовуваної для завантаження файлу, підкаже, успішно виконана команда чи ні. Зазвичай зворотний код 0 позначає успіх, а будь-яке ненульове число позначає помилку. Ви можете отримати доступ до коду повернення через $?
змінну.
Основний приклад використання wget
:
#!/bin/bash
wget foo.tgz &> /dev/null
if [[ "$?" != 0 ]]; then
echo "Error downloading file"
else
echo "Success"
fi
&> /dev/null
перенаправляє весь вихід wget, щоб /dev/null
він був ідеальним для сценаріїв, АЛЕ це ускладнює wget
помилки налагодження .
wget -q ... || { handle ; error ; }
man
час прочитання відповіді, і дві речі, про які я збирався сказати, були вже у двох відповідях - тому я зробив два коментарі. Приємного дотику і до вас.
wget
могло б подумати, що завантаження було завершеним, навіть якщо воно зламалось. Інформація про проксі про розірвані з'єднання TCP проти закритих TCP-з'єднань, що проблематично для HTTP, оскільки він використовує закритий TCP як кінцевий знак за замовчуванням. Ось чому я додав перевірку, чи відповідає розмір файлу із заголовка розмірам завантаженого файлу, коли я запустив масове завантаження. Не впевнений, чи wget
перевіряється така узгодженість чи те, що говорить http spec у цьому питанні.