解决rsync不兼容windows的问题,实现跨平台命令兼容

185 阅读2分钟

一、问题:

 原项目用的rsync 的命令,windows不兼容

二、思路:

刚开始想着windows系统支持rysnc命令,git 有一个配置,应该能支持到,但是安装了几次,终端命令并没有找到rysnc的版本。
用了cwrsync的第三方工具,但是公司电脑配置不了环境变量无法尝试也pass掉了。
最终解决方案替换命令,换到windows支持的命令。

三、过程:(windows支持的三个命令 xcopy、robocopy、powerShell,最终采用fs-extra)

 1.xcopy (不支持macOS)使用失败 总结: 路径长度限制、目录嵌套,以及排除多个目录导致失败
    a.路径长度限制:默认最大路径长度为 260 字符,深层嵌套目录容易失败。
    b.权限问题:无法复制被占用或只读文件。
    c.功能有限:不支持排除多个目录、日志记录、断点续传等高级功能。
    d.已逐渐淘汰:微软官方推荐使用robocopy或 PowerShell 替代。
 2.robocopy(不支持macOS) 使用失败 总结: 长路径未开、排除文件无递归方式
    a.路径长度限制:路径长度限制提升到 32767 字符(需启用长路径支持)。
    b.断点续传:支持失败后继续复制。
    c.多线程复制:速度更快(通过/MT参数)。
    d.灵活的排除规则:支持排除目录(/XD)、文件类型(/XF)。
    e.日志记录:可通过/LOG输出详细日志。
    f.自动重试:文件被占用时可重试(/R参数)。
3.powerShell (支持macOS但有版本差异,体现在命令行上面)使用失败 总结:路径转译、多重转译导致无法匹配、默认路径长度限制、大量文件复制可能导致超时或者缓冲区溢出而中断
    a.支持长路径:默认支持长路径(需启用)。
    b.对象化操作:可以操作文件对象,灵活过滤、排序、格式化输出。
    c.强大的脚本能力:支持函数、循环、正则表达式等。
    d.跨平台兼容(PowerShell Core):可在 Linux/macOS 上运行。
    e.丰富的 cmdlet:如Get-ChildItem、Copy-Item、Where-Object等。
4.fs-extra(支持macOS 已验证) 第三方包稳定、跨平台、也不需要命令行,自动处理 Windows 长路径、符号链接、隐藏文件等边缘情况最终解决也是较好的方案