緣由:
由於一個每天都要將遠程的數據同步到本地,並將數據截取一些字段更新到數據庫中(數據每天有3g左右),開始使用綠環備份,用程序定時查找目錄是否有變化,讀取文本文件后更新到數據庫。在使用中發現會與綠環造成文件沖突,將綠環的間隔時間加大有可能造成同步不及時,影響數據的及時性。想到了使用windows的計划任務調用批處理,完成同步工作和更新數據工作,因為批處理在上一個任務沒有結束前是不會開始下一個任務的。
使用wget
wget是一個非常穩定的開源工具,從linux移植過來的。用法如下(我將命令的參數加入到了注釋中)
2 rem -c 斷點續傳
3 rem -N 比較文件時間戳
4 rem -nH 不創建IP地址為文件夾的目錄名
5 rem -P 將文件下載到指定目錄
6 rem -r 遞歸調用,下載子目錄
7 wget -o E:\RE\LOG.TXT -c -N -nH -P E:\RemoteData\ --ftp-user=你的用戶名 --ftp-password=密碼 ftp://網址/ -r
8 cd ..
9 cd ..
10 cd D:\myCode\AutoProcess\ConsoleApp\bin\ Debug\
11 ConsoleApp.exe
使用lftp
在不追求速度時,wget已經工作得很好了,網上的資料也很豐富,但是數據較大,有好幾個文件,使用wget需要更新2,3個小時(網速只有8M,而且ftp被限速了)。所以只好找一個可以多線程下載的工具。lftp也是Linux移植過來的,功能非常強大,但是資料比wget要少,尤其是在windwos下的使用。
2 rem -u 用戶名
3 rem -e 在選擇后執行命令
4 rem 以下是mirror 項
5 rem -c 斷點續傳
6 rem -e 這個要小心一些, 比較遠端和本地端的檔案, 假如遠端沒有的, 就將本地端的檔案刪除, 也就是將本地端和遠端資料同步。
7 rem -n 只下載較新的檔案
8 rem -r 不用遞回到目錄中
9 rem --parallel=n 同時下載 n 個檔案(預設一次只下載一個)
10 e:
11 cd E:\RemoteData\
12 copy D:\tools\lftp\ftpscript.txt E:\RemoteData\ /Y
13 d:\tools\lftp\lftp -f ftpscript.txt
14 cd\
15 d:
16 cd D:\myCode\AutoProcess\ConsoleApp\bin\ Debug\
17 ConsoleApp.exe
ftpscript.txt中的內容
2 mirror -c -e -n -r --parallel=10 /
3 exit
lftp的使用疑惑
在“使用lftp”一節中第12行(copy D:\tools\lftp\ftpscript.txt E:\RemoteData\ /Y ),可能有讀者會問為什么,因為我實在是不知道在lftp中如何訪問指定目錄下的文件,我這樣調用過
得到錯誤提示
source: d:\tools\lftp\ftpscript.txt: No such file or directory
同樣的,mirror [OPTS] [remote [local]]
這個[local],也有同樣的問題,有高手知道嗎,請指教,謝謝。
解決windows下目錄訪問和多線程下載的問題(確實比大多數windows下的圖形工具好用太多)
在windows下,如果要指定目錄請使用
多線程請使用
比如完整的命令如下:
另外,最新的Lftp,在這里可以下載。有需要的可以下載,軟件的主頁要翻牆才可以得到。