校验和远程文件

时间:2011-07-23 16:19:15

标签: linux command-line curl terminal checksum

有没有办法获得一个程序,我可以通过命令行运行,该程序将执行远程文件的校验和?例如,获得https://stackoverflow.com/opensearch.xml

的校验和

我希望能够获得有关新rss / xml条目何时可用的更新。我以为我可以偶尔对文件进行校验和,如果它不同则必须有更新。我正在寻找一个shell脚本来检查新的rss / xml数据。

5 个答案:

答案 0 :(得分:5)

为了对文件进行校验和,您必须先下载它。 取而代之的是,在请求标头中使用If-Modified-Since,服务器将使用304未修改的标头和没有内容(如果文件未更改)或文件内容(如果已更改)进行响应。您可能也有兴趣检查服务器上的ETag支持。

如果下载文件不是问题,可以使用md5_file获取文件的md5校验和

答案 1 :(得分:5)

使用curl执行此操作的快速方法是将输出通过管道输出到sha1sum,如下所示:

curl -s http://stackoverflow.com/opensearch.xml|sha1sum

答案 2 :(得分:1)

您应首先检查HTTP标头,以查看服务器本身是否愿意在文件来源时告诉您;如果你不需要,它被认为是获取整个文件的不良形式。

否则,你需要使用像wget或curl这样的东西来获取文件,所以我真的希望你不打算使用任何大的文件。

答案 3 :(得分:1)

你可以在你的bash下试试这个:

wget <http://your file link>

md5sum <your file name>

答案 4 :(得分:1)

卷曲

卷曲有一个&#39; -z&#39;选项:

   -z/--time-cond <date expression>|<file>
          (HTTP/FTP) Request a file that has been modified later 
          than the given time and date, or one that has been modified before
          that  time.  The  <date expression> can be all sorts of date strings
          or if it doesn't match any internal ones, it is taken as a filename
          and tries to get the modification date (mtime) from <file> instead.
          See the curl_getdate(3) man pages for date expression details.

所以你可以做的是:

$ curl http://stackoverflow.com/opensearch.xml -z opensearch.xml -o opensearch.xml

如果远程文件比本地文件更年轻(本地文件可能不存在 - 在这种情况下将被下载),这将进行实际下载。这似乎正是你所需要的......

wget的

wget还可以选择跟踪时间戳 - -N

When running Wget with -N, with or without -r or -p, the decision as to whether
or not to download a newer copy of a file depends on the local and remote
timestamp and size of the file.

-N, --timestamping               Turn on time-stamping.

所以如果wget可以使用:

$ wget -N http://stackoverflow.com/opensearch.xml