Windows下使用Git+rsync构建文件同步工具


“打工人,打工魂,打工都是人上人……”随着打工人的口号越喊越响亮,最近的工作也越来越忙了😆 。在不得已的情况下,经常需要把当天未看完的文档,未写完的代码,拷贝到U盘,带回家继续整;在文件比较少的情况下还好,在文件特别多、或者特别大的情况下,处理起来就会比较麻烦。于是我意识到需要用一个工具来完成这个文件同步的工作,自然而然就想到了 Linux 平台上的 rsync;rsync 的优点是显而易见的:支持网络和本地传输,支持断点传输,最重要的是——支持增量更新,这也就让它在处理多文件、大文件的时候更加有优势了。

那么能否实现在 Windows 系统中运行 rsync 呢?在网上找了一些资料并折腾了一番,发现是可以实现的。

一、原理

如何在 Windows 下跑 rsync ?

rsync 是 Linux 平台的程序,要在 Windows 运行,要么就是拿源码在Windows环境下重新编译一遍,那么就会用到 MinGW 这类的编译工具,并且改动源码肯定是少不了的;要么就是在 Windows 下搞一个 Linux 的虚拟环境,那么可以考虑 Cygwin, WSL 这类东西。有没有更简单的方法呢?想到在 Windows 下使用 Git Bash 工具的时候,也经常会使用到 ls, grep 这类 Linux 下的命令,那么这个又是如何实现的?

找了一些资料,发现 Git for Windows 是基于 MSYS 做出来的。以下引用一段来自知乎网友的话:

MSYS

当 MinGW 出现之后,程序员们发现光有 GCC 不行啊,面对着如此 naive 的 Windows 命令行也照样不能干活,Cygwin 又太大了。所以 MinGW 的一群人再次 fork 了 Cygwin,把它精简了一番,就成了 MSYS。后来,MinGW 咕咕咕了,MSYS 也随之咕咕咕了,又一群程序员 fork 了新版本的 Cygwin,精简了一番,给它加上了 Pacman 包管理器(没错就是 Arch Linux 用的那个),最后给 MSYS 的名字后面加了个 2,成了 MSYS2。

Git for Windows

随着 Git 的快速完善,将 Git 移植到 Windows 的呼声越来越高,可是 Git 需要很多 Linux 下的命令行工具,所以不想重复造轮子的 Git 开发者们找到了 MSYS2,又将 MSYS2 做了一番精简和针对 Git 的修改,把 Git 放了进去。

ls, grep 这些程序包正是通过 Pacman 去管理的。而在 Git 的安装目录下也是可以找到这些程序包的 exe 文件的(在 Git/usr/bin 目录下)。

那么,是不是找到了 rsync 在 Windows 平台的 pacman package,同样就可以实现在 Windows Git Bash 中运行 rsync 呢?

答案确实是如此的。这篇文章就将介绍这个实现过程。

二、下载安装包 点击下载

可在此处下载 windows 环境下的 Pacman package: http://www2.futureware.at/~nickoe/msys2-mirror/msys/x86_64/

我们需要使用到以下的两个 package: zstd 和 rsync。(zstd 是用来解压 rsync 的程序包的)

选择其中最新的版本来下载即可。

如,我将 zstd-1.4.5-2-x86_64.pkg.tar.xz 和 rsync-3.2.3-1-x86_64.pkg.tar.zst 下载到 D:\tools 目录下。

三、使用 zstd

使用 7zip 等Windows下的解压工具解压 zstd-1.4.5-2-x86_64.pkg.tar.xz。

将 zstd 的相关文件复制到 Git 安装目录的对应位置,如:

D:\tools\zstd-1.4.5-2-x86_64.pkg\usr\bin --> D:\Program Files\Git\usr\bin
D:\tools\zstd-1.4.5-2-x86_64.pkg\usr\share --> D:\Program Files\Git\usr\share

使用 zstd 来解压 rysnc 包。打开 Git Bash,执行:

cd  /d/tools/
mkdir rsync-3.2.3-1
tar -I zstd -xvf /d/tools/rsync-3.2.3-1-x86_64.pkg.tar.zst  -C /d/tools/rsync-3.2.3-1

四、使用 rsync

将 rsync 的相关文件复制到 Git 安装目录的对应位置,如:

D:\tools\rsync-3.2.3-1\usr\bin --> D:\Program Files\Git\usr\bin
D:\tools\rsync-3.2.3-1\usr\lib --> D:\Program Files\Git\usr\lib
D:\tools\rsync-3.2.3-1\usr\share --> D:\Program Files\Git\usr\share

在 Git Bash 中使用 rsync:

#查看版本号
rsync --version
#查看帮助信息
rsync -h
#同步文件
rsync -avP <src_dir> <dest_dir>

以下是实际使用的例子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9IebSUB-1630633815654)(window Git完美使用rsync.assets\image-20210511164255265.png)]

五、编写 shell 脚本

为了更加方便使用,还可以将 rsync 命令写入脚本来运行。

如,我写了如下的 sync_to_udisk.sh 用来将我本地目录的文件夹同步到U盘上:

rsync -avP --exclude-from './ExcludeLists.txt' /d/LocalDir/ /f/UdiskDir/

六、一些坑

1、缺少.dll文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIWdeYVr-1630633815656)(…\工具\window Git完美使用rsync.assets\image-20210511163507646.png)]

别慌,这里提供给你

msys-zstd-1.dll

msys-xxhash-0.8.0.dll

并放到

D:\Program Files\Git\usr\bin

2、zstd 和 rsync下载不了或者网络down了,看下面
点击下载

[zstd](window Git完美使用rsync.assets\zstd-1.4.7-1-x86_64.pkg)

[rsync](window Git完美使用rsync.assets\rsync-3.2.3-1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值