利用脚本自动下载ftp列表中的文件

咱们可能会遇到这种场景,在某个机构订阅了一个邮件列表,而后这个机构会按期的发送带有ftp目录的url地址到你的邮件,如今你想在你的服务器上可以方便的下载这个列表上的文件,而不是手动的一个个去下,那么咱们能够用脚原本完成这个功能,我将这个过程分为两部分,第一步获取到ftp页面的全部文件名称,第二步是经过得到的文件名来下载文件浏览器

下面以一个卫星数据的下载为例:bash

ftp://oceans.gsfc.nasa.gov/subscriptions/1227这个是邮件中收到的url地址,在浏览器中能够查看到文件名,因为这个数据是0,这个是这样设计的,服务器

第一步:咱们只须要获取他的文件名,用下面这个脚本优化

#! /bin/shurl

echo "请输入你的FTP目录编号"spa

read -e id设计

wget -r  ftp://oceans.gsfc.nasa.gov/subscriptions/$idip

ls  /usr/src/oceans.gsfc.nasa.gov/subscriptions/$id/ > /usr/src/filename.txtci

这样文件名就被下载到了/usr/src/filename.txt中了get

第二步:提取文件名下载数据

#! /bin/sh

a=$(cat /usr/src/filename.txt |wc -l)

echo "请输入你要下载的文件的存放路径"

read -e dir

mkdir -p $dir

cd $dir

for((i=1;i<=a;i++))

do

b=$( head -$i /usr/src/filename.txt |tail -1)

wget -T 20 -c -t 0 http://oceandata.sci.gsfc.nasa.gov/cgi/getfile/$b

done

这样数据就被下载到指定位子了

 

上面是功能的分块实现

下面对脚本进行了优化

#!/bin/bash

input=

until

 echo "----------------------------------"

 echo "您想作下列哪项操做"

 echo "(1) 获取指定目录文件名(需知道目录编号)"

 echo "(2) 请输入你要下载的FTP目录编号"

 echo "(3) 检查文件是否下载完整(需指定目录编号)"

 echo "(4) 不作操做退出"

 echo "----------------------------------"

 read -e input                    #读入用户输入的内容,并存入变量

 test $input -eq 4                            #若输入为4,则退出,不然继续

 do

  case $input in                                     #开始CASE  IN  CASE结构

 1)

        echo "请输入你的FTP目录编号"

        read -e id

        wget -r -T 20 -t 0 ftp://oceans.gsfc.nasa.gov/subscriptions/$id

        ls  /usr/src/oceans.gsfc.nasa.gov/subscriptions/$id/ > /usr/src/filename$id.txt;;

 2)

        echo "请输入你要下载的FTP目录编号"

        read -e id1

        a=$(cat /usr/src/filename$id1.txt |wc -l)

        echo "有 $a 个 文件"

        echo "请输入你要下载的文件的存放路径"

        read -e dir

        mkdir -p $dir

        cd $dir

        for((i=1;i<=a;i++))

        do

        b=$( head -$i /usr/src/filename$id1.txt |tail -1)

        wget  -c -t 0 -T 20  http://oceandata.sci.gsfc.nasa.gov/cgi/getfile/$b

        done

   ;;

 3)

        echo "请输入你要检查的FTP目录编号"      

        read -e id2

        echo "请输入你存放这个目录编号文件的存放路径"

        read -e dir1

        c=$(ls $dir1 |wc -l)

        d=$(cat /usr/src/filename$id2.txt |wc -l)

        echo "你但愿下载的文件数目是$d"

        echo "你实际下载的文件数目是$c"

        ;;

        esac                                                 #结束CASE结构

        done

相关文章
相关标签/搜索