Я пишу сценарий, который включает в себя загрузку и манипулирование файлом, и я хочу убедиться, что файл не является неполным (например, из-за разорванного соединения), прежде чем работать над ним.
Наиболее распространенный способ проверки целостности загружаемых файлов - использование контрольных сумм 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
будет идти:&> /dev/null
перенаправляет весь вывод wget,/dev/null
поэтому он идеально подходит для написания сценариев, НО это затрудняет отладкуwget
ошибок.источник
wget -q ... || { handle ; error ; }
man
Я нашел это только во время чтения, чтобы ответить, и две вещи, которые я собирался сказать, уже были здесь в двух ответах - поэтому я сделал два комментария. Приятное прикосновение к тебе тоже.wget
что загрузка может быть завершена, даже если она сломалась. Прокси-информация о разорванных TCP-соединениях и закрытых TCP-соединениях, что проблематично с HTTP, поскольку по умолчанию в качестве конечной метки используется закрытый TCP. Вот почему я добавил проверку, соответствует ли размер файла из заголовка размеру загружаемого файла, когда я запустил массовую загрузку. Не уверенwget
, проверяет ли такая согласованность или что спецификация http говорит по этому вопросу.