是否有命令行方法可以检查下载的文件是否完整或损坏?

Cla*_*are 13 download wget curl files corruption

我正在编写一个涉及下载和操作文件的脚本,我想在处理文件之前确保文件不完整(例如由于连接断开)。

arn*_*efm 10

验证下载文件完整性的最常用方法是使用 MD5 校验和。这假设您从实际发布的文件的 MD5 校验和下载的站点。您可以通过创建自己的下载文件校验和并将其与发布的校验和进行比较来验证 MD5 校验和。如果它们相同,则您下载的文件是完整的且未被篡改。

如果您不希望正在下载的文件发生更改,您可以预先计算校验和并将其硬编码到脚本中,但如果文件被更新,则验证将失败。

要创建文件的 MD5 校验和,请运行md5sum myFile. 在 wget 的情况下,您可能会发现此命令很有用,尤其是当您下载的文件很大时:

wget -O - http://example.com/myFile | tee myFile | md5sum > MD5SUM.

这将在下载时创建“myFile”的校验和并将其保存到文件 MD5SUM 中,可能会为您节省一些时间。

在连接断开的情况下,我认为最好的方法是检查 wget 的退出代码。如果下载成功且没有任何错误,wget 将返回0。其他任何事情都表明出了问题。看一看 的“退出状态”部分man wget

  • 退出代码:https://www.gnu.org/software/wget/manual/html_node/Exit-Status.html#Exit-Status (2认同)

Cre*_*eek 7

用于下载文件的命令的返回码将告诉您该命令是否成功执行。通常,返回码 0 表示成功,任何非零数字表示错误。您可以通过$?变量访问返回码。

一个基本的例子wget是:

#!/bin/bash

wget foo.tgz &> /dev/null

if [[ "$?" != 0 ]]; then
    echo "Error downloading file"
else
    echo "Success"
fi
Run Code Online (Sandbox Code Playgroud)

&> /dev/null将 wget 的所有输出重定向到,/dev/null因此它非常适合编写脚本,但它使调试wget错误更加困难。

  • 你可能会这样做:`wget -q ... || { 处理 ; 错误 ; }` (4认同)