使用WinSCP脚本在win10和linux之间实时同步文件

使用WinSCP脚本在win10和linux之间实时同步项目并排除目录

最近在学OpenGL,有时候需要看不同系统渲染结果是否一致。而且我喜欢用vim来敲代码,用原生的总比插件好。

用CMake来构建项目,可以在Visual Studio 和在linux中编辑同一个项目,方便地编译运行查看结果。

但是每次代码更改后都要点一下ftp工具来同步两台电脑,有点麻烦。WinSCP可实现本地实时同步到远程,但是反过来虽然有扩展可以实现,却不能实时,和排除目录。

本文前提条件是能够在win端使用WinSCP连接到linux。只在局域网内测试过。

1 下载安装WinSCP

在win10中安装WinSCP,这是一个免费的ftp、sftp的客户端软件。与某基金会没有关系

官网下载:

[https://winscp.net/eng/download.php](javascript:)

安装时可以选择添加到环境变量,方便命令行调用。

2 使用WinSCP同步目录

2.1 新建会话,连接到linux

打开WinSCP,在登录窗口中输入你要同步的主机名(或ip)、端口号、用户名。

在这里插入图片描述

2.2 浏览目录,同步一次

浏览远程项目目录,记下地址

在这里插入图片描述

点击同步,输入本地项目目录

点击确认即可同步
在这里插入图片描述

2.3 使用文件掩码排除目录

点传输设置-文件掩码-编辑
在这里插入图片描述
在这里插入图片描述

写要排除的文件或目录,比如.开头的目录、build目录等,记录下掩码。这个就像.gitignore,可以选择不同步编译的目录。以后想排除什么目录,在这个界面配好,让他给你生成就行了。

掩码是类似这样的:

| .*/; build/; vs-build/
2.4 命令行同步目录

脚本需要在命令行中启动一个会话,也就是登录到远程。不过代码WinSCP已经帮你生成好了。

点击会话-生成会话URL/代码

脚本-格式选择脚本文件,复制所示代码
image-20220330032135476

打开命令行,输入WinSCP安装路径\WinSCP.com,如果设置了环境变量,则可直接输winscp.com

将复制的代码粘贴过来,打开会话,即可进入远程目录

image-20220330032413093

建议先备份项目。

输入同步命令如下,将掩码和目录补上

synchronize both 本地目录 远程目录 -filemask="掩码"

例如

synchronize both J:\code\gl\test1 /home/pde/code/gl/test1 -filemask="| .*/; build/; vs-build/"

看看同步效果合不合预期,如果不合,检查代码,也可看官网文档

https://winscp.net/eng/docs/scriptcommand_synchronize

3 编写脚本,自动同步

WinSCP同样帮你生成了批处理代码,不过需要改一下。

点击会话-生成会话URL/代码
image-20220330025616245

点击脚本-格式为批处理文件,复制所示代码

image-20220330031748134

新建批处理文件,粘贴代码,将“你的命令”替换成刚才那行同步命令,注意要将嵌套引号"写成两个""。写个循环,隔几秒执行一次

我的脚本如下

sync.bat

:s

"J:\WinSCP\WinSCP.com" ^
  /log=".cache/WinSCP.log" /ini=nul ^
  /command ^
    "open sftp://root:password@192.168.1.3/ -hostkey=""ssh-ed25519 255 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=""" ^
    "synchronize both J:\code\gl\test1 /home/pde/code/gl/test1 -filemask=""| .*/; build/; vs-build/"" " ^
    "exit"

timeout 3
goto s

其中timeout 3表示3秒执行一次,命令行中执行脚本就会给你3秒同步一次,要停止就按Ctrl+C。

这个脚本可以方便地修改目录和掩码,同步其他目录。

效果如下
在这里插入图片描述

4 其他

4.1 不足之处

此脚本的缺点:不能删除文件,你删了一边他又给你从另一边同步回来了,得停止脚本,然后两边都删了才行,希望有大佬帮忙解决下。而且每次同步都打开一个会话,可能会造成资源浪费,应该在同一个会话中不断同步,看官网发现应该能用.NET实现,不过我不会。

4.2 vim设置自动读取

如果你使用vim的话,得在.vimrc中加上自动保存、自动读取

set autowriteall
set autoread
augroup AutoRW_Insert
    au!
    au insertenter,insertchange,insertleave * silent execute '!checktime'
augroup END

才能方便地同步,不过是切换编辑时同步

5 类似软件

  • rsync

  • FreeFileSync

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值