windows下的命令行同步工具wget、lftp用法和疑问(已解决)

缘由:

      由于一个每天都要将远程的数据同步到本地,并将数据截取一些字段更新到数据库中(数据每天有3g左右),开始使用绿环备份,用程序定时查找目录是否有变化,读取文本文件后更新到数据库。在使用中发现会与绿环造成文件冲突,将绿环的间隔时间加大有可能造成同步不及时,影响数据的及时性。想到了使用windows的计划任务调用批处理,完成同步工作和更新数据工作,因为批处理在上一个任务没有结束前是不会开始下一个任务的。

使用wget

      wget是一个非常稳定的开源工具,从linux移植过来的。用法如下(我将命令的参数加入到了注释中)

 1 rem -a 将日志信息添加到文件
 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下的使用。

 1 rem -p 端口号
 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中的内容

1 lftp ftp站点IP -p 21 -u 用户名,密码
2 mirror -c -e -n -r --parallel=10 /
3 exit

 

lftp的使用疑惑

在“使用lftp”一节中第12行(copy D:\tools\lftp\ftpscript.txt E:\RemoteData\ /Y ),可能有读者会问为什么,因为我实在是不知道在lftp中如何访问指定目录下的文件,我这样调用过

 

1 D:\tools\lftp>lftp -f d:\tools\lftp\ftpscript.txt

得到错误提示
source: d:\tools\lftp\ftpscript.txt: No such file or directory

 

同样的,mirror [OPTS] [remote [local]]

这个[local],也有同样的问题,有高手知道吗,请指教,谢谢。

 

解决windows下目录访问和多线程下载的问题(确实比大多数windows下的图形工具好用太多)

 在windows下,如果要指定目录请使用

 

/cygdrive/你的盘符/盘符下的目录/

 

多线程请使用 

 

--use-pget=线程数

 

比如完整的命令如下:

 

lftp ftp站点IP -p 21 -u 用户名,密码  -e "mirror -c -e -n -r --parallel=8 --use-pget=10 / /cygdrive/e/RemoteData/"

 

 另外,最新的Lftp,在这里可以下载。有需要的可以下载,软件的主页要FQ才可以得到。


posted @ 2012-02-02 11:22  GDLMO  阅读(8976)  评论(1编辑  收藏  举报