情景:bim的系统补丁下载,会告诉你一个ftp服务器地址和目录,该目录是所需补丁的文件链接,而不是实际文件,如lrwxrwxrwx 1 17590 446 62 Jul 12 20:34 72.bff -> /aix/fixes/byCompID/5765E6200/bos.rte/bos.rte.aio.5.2.0.75.bff。这样的链接,在用linux自带的ftp登录后get/mget下载时, 文件名是链接名,内容为实际文件,此时下载是成功的。
问题1:如果下载文件比较多,用get方式下载速度慢而且不保险,一旦断掉再次下载就很麻烦,因为你不知道下到哪里了。
问题2:ibm下载站点登录的时间非常长,大概需要4分钟时间才出现登录画面,这样的时间让多数windows的ftp软件超时,如cuteftp,smartftp没有设置超时的配置,ftprush最高时间为200秒。
问题3:windows explorer是可以登录的,但必须一个文件一个文件的另存为下载,flashxp可以设置很长的超时时间,可以登录,但下载到文件是链接文件,而不是实际文件。wget也可以下载,但它也是下载链接文件而不是实际文件。
解决方法:wget不受登录时间影响,实际连接地址可以根据连接文件得到,wget是可以用shell脚本方式调用的。所以先拿到连接文件,再得到连接地址,然后用shell循环调用wget(比ftp的get快很多),可以快速下载。
代码示例如下,其中files.txt为下载的连接地址,totalrunning表示同时下在的进程数。
INPUT=files.txt
LOGFILE=wgetibm.log
totaltasknum=`wc $INPUT | awk '{print $1}'`
dotasknum=0
totalrunning=10
echo total task is $totaltasknum
for file in `awk '{ print $11 }' $INPUT`
do
URL=ftp://www7b.boulder.ibm.com$file
tmppn=`ps -ef | grep wget | grep -v grep | wc | awk '{print $1}'`
echo wget processes count : $tmppn
while [ $tmppn -ge $totalrunning ]
do
echo wait for process release......
sleep 10
tmppn=`ps -ef | grep wget | grep -v grep | wc | awk '{print $1}'`
done
echo begin wget from url $URL
nohup wget ftp://www7b.boulder.ibm.com$file >> $LOGFILE &
done