我习惯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
或类似的东西