shell脚本中使用wget下载文件并进行last-Modified判断

原创文章,转载请注明出处http://zhouzaibao.iteye.com

    问题场景:

    最近有一个应用需要定期到服务器上下载一个文件,这个文件会根据情况进行更新,有可能10分钟更新一次有可能一天都不会更新。并且这个文件比较大,所以不能每次都去下载,在下载之前最好进行文件最后修改时间的判断。

    问题分析:

    我想用脚本来实现,不想动用java或者python这些编程。在linux的shell中带有wget这个命令。这个命令有两个参数

    --header:在请求的时候可以发送一个header。如果发送的header包括If-Modified-Since则服务器会判断,如果未更改则返回304,表明不用下载。

   --save-headers:在下载文件的开头部分存储响应头。

    特别注意:

    在保存的文件中的header中(第4行)有一个回车换行符一定要处理,windows平台的回车换行(^M)的输入方法是按住CTRL+v,松开v,按m。这个困扰了很久,大家一定要注意了

   代码及说明:

#!/bin/bash

#下载文件实际存放地址
fullfile='/home/pplive/squidFiles/full.txt'
#下载文件临时存放地址
tempfull='/home/pplive/squidFiles/temp/full.txt'

#取出文件中存放的响应header的Modify时间
header=`head -4 $fullfile|tail -1|sed -e s/Last-Modified/If-Modified-Since/g|sed -e s/GMT^M/GMT/g`
echo $header
#下载文件
/usr/bin/wget -t 3 -O $tempfull --header="$header" --save-headers http://60.28.216.145:8090/full.txt
#下载文件存在并且文件大小大于100则移动临时文件到工作目录,304返回的时候有一个空文件,所以不能只做文件是否存在判断
if [ -e "$tempfull" ]  && [ `du -s $tempfull | awk '{print $1}'` -gt 100 ]; then
        echo 'dowload idip.txt'
        echo 'move full.txt to work directory'
        /bin/mv -f $tempfull $fullfile
fi

 

你可能感兴趣的:(编程,linux,应用服务器,python,脚本)