如何判断 wget 是否正在下载文件?

如何判断 wget 是否正在下载文件?

我习惯wget在晚上自动下载文件(大多数是 zip 文件)。

然而,有时早上我发现有几个文件无法解压。我不知道为什么会发生这种情况,也许是远程服务器出了问题。

我想编写一个脚本来使用“unzip -t”定期测试下载文件夹中的 zip 文件,但我不想测试正在下载的文件。那么我如何判断文件是否正在被使用呢wget

答案1

您可以使用fuser, 或lsof

fuser foo.zip

输出看起来像这样:

$ fuser archlinux-2013.02.01-dual.iso 
/home/chris/archlinux-2013.02.01-dual.iso: 22506
$ awk -F'\0' '{ print $1 }' /proc/22506/cmdline 
wget

答案2

更改下载脚本以将文件下载到临时名称或目录,然后在下载完成后移动结果。这比尝试检测 wget 是否仍在工作更可靠;特别是,如果 wget 被中断(例如通过重新启动),您不会冒将部分文件误认为完整下载的风险。另外,一定要测试 wget 的返回状态。您损坏的文件很可能实际上是由于下载中断而被截断的文件。

cd incoming &&
wget http://example.com/foo.zip &&
mv foo.zip ..

答案3

您可以使用 lsof 检查文件是否被某个程序打开。

for FILE in /path/to/files/*.zip
    do
        if [ -z "$(lsof $FILE)" ]
            then
                unzip $FILE
        fi
done

或类似的东西

相关内容