利用腳本自動下載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

相關文章
相關標籤/搜索