咱們可能會遇到這種場景,在某個機構訂閱了一個郵件列表,而後這個機構會按期的發送帶有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