天天看点

shell多线程实现从ftp下载数据

<code>#!/bin/bash</code>

<code>function</code> <code>DownLoad()</code>

<code>{</code>

<code>local</code> <code>url=$1</code>

<code>local</code> <code>dirpath=$2</code>

<code>wget --</code><code>ftp</code><code>-user=gsics  --</code><code>ftp</code><code>-password=gsics \</code>

<code>-c -r -q -e  robots=off --reject=</code><code>"index.html*"</code>  <code>\</code>

<code>--tries=5 \</code>

<code>--timeout=20 \</code>

<code>--waitretry=10 \</code>

<code>--wait=3 \</code>

<code>--no-parent \</code>

<code>-nd -nH --dont-remove-listing \</code>

<code>--directory-prefix=${dirpath} \</code>

<code>${url}</code>

<code>}</code>

<code>psname=$0</code>

<code>psNum=`</code><code>ps</code> <code>aux |</code><code>grep</code> <code>${psname}|</code><code>wc</code> <code>-l`</code>

<code>if</code> <code>[ $psNum -gt 3 ]</code>

<code>then</code>

<code>cdir=`</code><code>pwd</code><code>`</code>

<code>echo</code> <code>'Process is Running .'</code> <code>&gt;${cdir}</code><code>/tmp</code><code>.log</code>

<code>echo</code> <code>`</code><code>date</code><code>` &gt;&gt;${cdir}</code><code>/tmp</code><code>.log</code>

<code>exit</code>

<code>fi</code>

<code>DATADIR=</code><code>/nas03/v6/AQUA/MODIS/L1/ORBIT</code>

<code>thread=5</code>

<code>if</code> <code>[ $</code><code># -eq 2 ];then</code>

<code>stime=$1</code>

<code>etime=$2</code>

<code>else</code>

<code>stime=`</code><code>date</code> <code>--</code><code>date</code><code>=</code><code>"-16 day"</code>  <code>+%Y%m%d`</code>

<code>etime=`</code><code>date</code> <code>--</code><code>date</code><code>=</code><code>"-1 day"</code> <code>+%Y%m%d`</code>

<code>let</code> <code>Flag=0</code>

<code>while</code> <code>:</code>

<code>do</code>

<code>if</code> <code>[ ${Flag} -</code><code>eq</code> <code>1 ];</code><code>then</code>

<code>                </code><code>stime=$(</code><code>date</code> <code>-d </code><code>"$stime 1day"</code>  <code>+%Y%m%d)</code>

<code>        </code><code>fi</code>

<code>        </code><code>let</code> <code>Flag=1</code>

<code>stime=$(</code><code>date</code> <code>-d </code><code>"$stime 1day"</code>  <code>+%Y%m%d)</code>

<code>        </code><code>if</code> <code>[[ $stime -gt $etime ]]; </code><code>then</code>

<code>                </code><code>break</code>

<code>cat</code> <code>&gt; ftpawx33.tmp &lt;&lt; EOF</code>

<code>user gsics gsics</code>

<code>as</code>

<code>cd</code> <code>/AQUA/MODIS/L1/ORBIT/</code><code>${stime:0:6}</code>

<code>nlist </code>

<code>quit</code>

<code>EOF</code>

<code>echo</code> <code>${stime}</code>

<code>jjj=`</code><code>date</code> <code>-d </code><code>"${stime}"</code> <code>+%j`</code>

<code>        </code><code>ftp</code> <code>-</code><code>v</code> <code>-n -i  10.0.66.33 &lt; ftpawx33.tmp &gt; ftpnamelist33.info</code>

<code>cat</code> <code>ftpnamelist33.info | </code><code>grep</code> <code>"^MYD"</code> <code>| </code><code>grep</code> <code>".A${stime:0:4}${jjj}"</code> <code>| </code><code>grep</code> <code>".006."</code> <code>&gt;namelist33.txt</code>

<code>if</code> <code>[[ ! -s namelist33.txt ]]</code>

<code>        </code><code>then</code>

<code>                </code><code>continue</code><code>;</code>

<code>if</code> <code>[ ! -d  $DATADIR/${stime:0:6} ]</code>

<code>mkdir</code> <code>-p $DATADIR/${stime:0:6}</code>

<code>DirPath=$DATADIR/${stime:0:6}/</code>

<code>declare</code> <code>-a order_array</code>

<code>let</code> <code>jj=0</code>

<code>for</code> <code>Name </code><code>in</code> <code>`</code><code>cat</code> <code>namelist33.txt`</code>

<code>url=</code><code>ftp</code><code>:</code><code>//10</code><code>.0.66.33:</code><code>/AQUA/MODIS/L1/ORBIT/</code><code>${stime:0:6}/$Name</code>

<code>order_array[$jj]=${url}</code>

<code>let</code> <code>jj=${jj}+1</code>

<code>done</code>

<code>if</code> <code>[ ${</code><code>#order_array[@]} -eq 0 ];then</code>

<code>unset</code> <code>${order_array}</code>

<code>continue</code>

<code>tmp_fifofile=</code><code>"/tmp/$$.fifo"</code>

<code>mkfifo</code>  <code>$tmp_fifofile</code>

<code>exec</code> <code>6&lt;&gt; $tmp_fifofile</code>

<code>rm</code>  <code>$tmp_fifofile</code>

<code>for</code>  <code>((i=0 ;i&lt;$thread ;i++ ));</code>

<code>    </code><code>echo</code> 

<code>done</code> <code>&gt;&amp;6</code>

<code>for</code>  <code>((i = 0 ;i &lt; ${</code><code>#order_array[@]};i++ ));</code>

<code>    </code><code>read</code> <code>-u6</code>

<code>    </code><code>{</code>

<code>        </code><code>DownLoad ${order_array[$i]} ${DirPath}</code>

<code>        </code><code>echo</code> <code>&gt;&amp;6</code>

<code>    </code><code>}&amp;</code>

<code>wait</code>

<code>exec</code>  <code>6&gt;&amp;-</code>

本文转自 SoulMio 51CTO博客,原文链接:http://blog.51cto.com/bovin/1937467,如需转载请自行联系原作者