
用 WinSCP 往服务器传文件,拖拽上传就完事了。
但如果要传的是一整个网站目录,一个一个拖就很蠢了——尤其是只改了几个文件的时候。
WinSCP 有三个自动化功能可以解决这个问题。但它们的行为差别很大,选错了会删掉不该删的东西。
先说清楚它们各自做什么。
这是手动触发的。
菜单里点一下,WinSCP 扫描本地和远程目录,算出差异,弹出一个清单让你预览——哪些要传、哪些要删。
确认之后才执行。
关键是它有几种模式,行为完全不同:
这一项要单独说。
"镜像"的意思是——让远程目录和本地完全一致。
所以它不只是"把本地有的传上去",还会把远程有、本地没有的文件删掉。
这在什么场景下会出事?
设想这个情况:
结果是:服务器上本地没有的文件,全被删了。
所以镜像模式用之前,必须确认一件事:远程目录里,除了本地这份内容,还有没有别的东西需要保留。
日常发布用"同步文件"就够了。 镜像主要用在"确定两边应该完全一致"的场景,比如部署一份全新副本。
这个是后台常驻的。
开启之后,WinSCP 会监听本地文件夹的变化。你一保存文件,它就自动把改动传上去。
适合的开发场景:本地改代码,保存即生效,不用手动传。
但它有个性能上的注意点。
WinSCP 检测到变化后,不一定只传那一个文件——它可能会做一次目录整体比对,确保最终状态一致。
如果监控的目录里有大量子目录,这个开销会很明显。
实际建议:
它本质上是个"实时"功能,代价是持续的资源占用。
前两个都是在界面上点的。如果要做定时任务,就得用命令行。
WinSCP 自带一个命令行程序(程序名就是 WinSCP.com),配合脚本文件使用。
先写一个脚本文件,比如 sync_script.txt:
option confirm offopen sftp://用户名:密码@主机地址/synchronize remote "C:\本地目录" "/远程目录"exit然后调用它:
WinSCP.com /script="C:\path\to\sync_script.txt" /log="C:\logs\winscp.log"配合 Windows 任务计划程序,就能做成每天定时同步。
option confirm off
这一行很重要。 脚本模式虽然默认不弹交互提示,但显式关掉确认更保险——否则某些操作可能因为等待确认而卡住。
synchronize remote
remote 表示本地传到远程。也可以写 local(反方向)或 both(双向)。
/log= 参数
把日志写到文件里。 定时任务跑在后台,出问题的时候你只能靠日志排查。
主机指纹
第一次连接时,如果从没手动连过这台服务器,脚本会因为等待指纹确认而挂起。
处理办法:先在图形界面里连一次并确认指纹;或者在 open 命令里用参数显式指定。
这是自动化脚本最常见的失败原因之一。
传文件时还有个容易踩的坑。
WinSCP 有三种传输模式:
默认的"自动"在大多数情况下够用。
但有两个场景要注意:
传图片、压缩包、可执行文件——必须用二进制。
这些文件的内容是精确的字节序列,任何"转换"都会损坏它们。
传文本文件到 Linux——文本模式会帮你把 Windows 的 CRLF 转成 Linux 的 LF。
这本来是好事,但如果脚本本身需要保持 CRLF,转换反而会出问题。
判断依据很简单:这个文件的内容,是不是"文本"?
是文本,转换换行符可能有用;不是文本,一律二进制。
传完文件访问不了,或者脚本跑不起来——多半是权限问题。
Unix 权限用三个数字表示,最常遇到的是这两个:
为什么目录要 755?
因为进入一个目录,需要的是"执行"权限。
目录权限没有 x,你连 cd 进去都不行——这也是为什么权限设错时,表现为"打不开"而不是"读不了"。
在 WinSCP 里怎么改:右键文件 → 属性 → 在八进制框里直接输入数字。
也可以在传输设置里配置默认权限,这样上传时自动套用,不用每次手动改。
这三个功能解决的是同一个问题——"怎么让两边保持一致"。
但它们的激进程度不同:
从轻到重依次是这三档。 日常用前两档就够,镜像留给确定两边必须完全一致的场景。
用之前先问一句:远程目录里,有没有本地没有但需要保留的东西?
安装包:
https://dubapkg.cmcmcdn.com/cs/257def/WinSCP.exe
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。