curl 检查文件是否较新,而不是下载 - 执行 bash(或 python)脚本

curl 检查文件是否较新,而不是下载 - 执行 bash(或 python)脚本

我遇到了一点问题。

我有一个文件,托管在远程服务器上(http://我的网站/file.zip)。我还有几个嵌入式 Linux 盒(运行 openelec OS)。这些盒子的命令相当有限,但它们仍然具有基本的 curl、bash 等。它们都存储了文件(/storage/file.zip)

我想要做的是 - 我需要设置一个脚本,该脚本在设备完全启动后的第一分钟内执行,它可能会使用 curl 来检查远程服务器文件(mywebsite/file.zip)是否比本地文件(/storage/file.zip)新,并且如果它较新,则不是下载它 - 它需要执行一个 bash 脚本(/storage/scripts/script.sh)

我一般用这个命令“curl -o /storage/file.zip -z /storage/file.ziphttp://website/file.zip“但我不知道如何让它执行脚本,而不是下载文件。甚至不确定是否有可能。

非常感谢所有帮助!

另外,为了确保万无一失,只有当 localfile 比 remotefile 旧时才需要执行。如果 localfile 比 remotefile 新 - 它不需要执行脚本,因为执行的脚本也会从服务器下载远程文件,因此在执行后 - localfile 将带有较新的时间戳,如果没有指定仅在较新的 remotefile 上执行脚本 - 它可能会陷入无限循环。

答案1

您无需查看文件名,而是可以相信 HTTP 服务器会告诉您文件上次更改的时间并采取相应的措施。

#!/bin/bash

remote_file="http://mywebsite/file.zip"
local_file="/storage/file.zip"

modified=$(curl --silent --head $remote_file | \
             awk '/^Last-Modified/{print $0}' | \
             sed 's/^Last-Modified: //')
remote_ctime=$(date --date="$modified" +%s)
local_ctime=$(stat -c %z "$local_file")
local_ctime=$(date --date="$local_ctime" +%s)

[ $local_ctime -lt $remote_ctime ] && /storage/scripts/script.sh

# end of file.

答案2

其他答案对于常规 Linux 来说很棒,但对 OpenELEC 不起作用。所以我决定按大小进行比较,结果非常好!代码如下:

#!/bin/bash
Local=$(wc -c < file.zip)
Remote=$(curl -sI http://server/file.zip | awk '/Content-Length/ {sub("\r",""); print $2}')
if [ $Local != $Remote ]; then
/bin/bash /storage/scripts/script.sh
else
echo "Same size."
fi

相关内容