1. 软件介绍
WinSCP(http://winscp.net) 是一个 Windows 环境下帮助网络工程师使用SSH的开源图形化SFTP客户端,支持 SCP, SFTP 和 SCP 协议,支持批处理脚本和命令行方式,多种半自动、自动的目录同步方式,如图1所示。
使用脚本进行SFTP_第1张图片
2. 脚本方式进行SFTP的例子
假设我们从192.168.199.98服务器用test 用户登录,密码为test从服务上取下server.txt文件,把本地local.txt上传,那么gettxt.txt脚本如下
#设定如果有文件不进行覆盖提示,只接覆盖
option confirm off
#连接目标服务器,支持的格式为[ sftp|ftp|scp:// ][ [ :password ] @ ] [ : ]
open sftp://test:[email protected]
# 设定二进制传输
option transfer binary
#下载文件到本地D盘
get /home/test/server.txt d:\server.txt
#上传文件到服务器
put d:\local.txt /home/test/local.txt
# 退出WinSCP软出
exit

执行的方式
winscp.exe /console /script=gettxt.txt

3. 同服务器进行文件夹镜像同步的脚本
假设我们以D:\temp\myfile\为源,向/home/test/myfile/进行镜像,每次执行时进行文件对比,有变化进行更新,那么l2s.txt脚本如下
option confirm off
option transfer binary
open sftp://test:[email protected]
#本地目录向远程镜像更新,注意/home/test/myfile/一定要先存在
#如果把remote 改成local 将是服务器向本地工作更新
#-delete 表示如果目标端有源端不存在的文件就删除
synchronize  -delete remote D:\temp\myfile\ /home/test/myfile/
exit
执行的方式
winscp.com /console /script=l2s.txt
注意:对于SFTP和SCP协议上传文件是可以更新时间戳同本地文件相同的,所以对比的原理是进行时间对比;但FTP默认上传到FTP的文件的时间,就是文件在FTP服务上建立文件的具体时间,为达到同样效果,对于FTP服务器要用时间和长度分别比较一次,具体为如下语句
synchronize -delete -criteria=size remote D:\temp\myfile\ /home/test/myfile/
synchronize -delete -criteria=time remote D:\temp\myfile\ /home/test/myfile/
4. 时间监控本地目录,发现变化就向服务器进行更新
参考脚本如下l2ss.txt
option confirm off
option transfer binary
open sftp://test:[email protected]
#本地目录向远程更新,实时监视改变,按Ctrl-C中止...
keepuptodate -delete D:\temp\myfile\ /home/test/myfile/
exit
执行的方式
winscp.com /console /script=l2s2.txt