windows下的命令行同步工具wget、lftp用法和疑问(已解决)
缘由:
由于一个每天都要将远程的数据同步到本地,并将数据截取一些字段更新到数据库中(数据每天有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,在这里可以下载。有需要的可以下载,软件的主页要FQ才可以得到。