最近工作很忙,常常需要把一些需要继续处理的文件拷贝到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 做出来的。以下引用一段来自知乎网友的话:

(来源:https://www.zhihu.com/question/65055974/answer/227054790)

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:

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>

以下是实际使用的例子:

五、编写 shell 脚本

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

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

rsync -avP --exclude-from './ExcludeLists.txt' /d/LocalDir/ /f/UdiskDir/
# 以下休眠3秒只是为了看一下执行过程,完全可以去掉 :)
sleep 3

这样每次要进行文件同步的时候,只需要双击 sync_to_udisk.sh 让 Git Bash 自动运行即可。

命令中的--exclude-from 选项用来排除不需要同步的文件,可以将要排除的文件写入到 ExcludeLists.txt 中。

如以下这样,是把 sync_to_udisk.sh 和所有隐藏文件排除掉:

.*
sync_to_udisk.sh

你可以根据你的实际需求,写不同的脚本来实现。

最后,希望这篇文章可以帮助到所有遇到同样问题的小伙伴们。

Enjoy ~

参考

http://www.mingw.org/wiki/msys

https://wiki.archlinux.org/index.php/Pacman

http://www.ruanyifeng.com/blog/2020/08/rsync.html

https://www.jianshu.com/p/e3f17590c7d4

https://blog.tiger-workshop.com/add-rsync-to-git-bash-for-windows/

https://www.zhihu.com/question/65055974/answer/227054790

Windows下使用Git+rsync构建文件同步工具相关推荐

  1. Windows电脑值得下载使用的文件同步工具

    Windows电脑文件同步工具哪个好用?今天小西给大家推荐一款非常好用的文件同步工具,可以实现自动化同步.多设备(本地磁盘.移动硬盘.U盘.网盘等)同步,可以说实用性非常强. FileYee是一款Wi ...

  2. 6.6 rsync:文件同步工具

    rsync 是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据镜像同步备份的优秀工具.rsync适用于Unix/Linux/Windows等多种操作系统平台. rsync命令有三种常见模 ...

  3. Linux rsync远程文件同步工具:只对差异文件进行更新

    介绍 安装 yum -y install rsync #启动rsync服务 #systemctl start rsyncd.service #systemctl enable rsyncd.servi ...

  4. linux有哪些实时同步工具,rsync文件同步工具常见模式有哪些?linux系统

    互联网时代发展迅速,Linux运维技术的需求更多推进不少.市场对于Linux运维人才的需求也在逐渐加大.Linux行业崛起,在云计算大环境下,市场上对高级运维人员的需求将越来越大.文件同步工具rsyn ...

  5. Linux Rsync实现文件同步备份(转载)

    原文地址:Linux Rsync实现文件同步备份作者:夷北 转自:http://www.mike.org.cn/blog/index.php?load=read&id=639###pp=0 [ ...

  6. centos 多台 文件夹同步_CentOS7配置rsync实现文件同步

    rsync(remote synchronize )是一个远程文件同步工具,支持多个操作系统,用于在多台服务器之间同步目录和文件.rsync采用增量传输文件的方法,只传输新文件和修改过的文件,而不是每 ...

  7. Linux日常运维管理技巧(四)文件同步工具-rsync、Linux系统日志、dmesg命令、lastb命令查看登录失败的用户、screen工具虚拟屏幕

    目录 Linux文件同步工具-rsync Linux系统日志 dmesg命令 lastb命令 screen工具 Linux文件同步工具-rsync rsync命令是一个远程数据同步工具,可通过LAN/ ...

  8. CentOS7配置rsync实现文件同步

    文章目录 一.安装软件包 二.修改系统配置 1.关闭SELINUX 2.开通防火墙端口 3.启用rsyncd服务 三.配置rsync 1.创建操作系统用户 2.创建测试目录和文件 3.创建rsnyc登 ...

  9. git ssh配置完后拉取代码_二、windows下使用git拉取github上的项目(通过设置ssh key方式)...

    一.windows下使用git拉取github上的项目 1.创建仓库 说明: 2.打开git bash 3.使用ssh-keygen命令生成自己的公钥和私钥 首先输入ssh-keygen,这里会提示你 ...

  10. 如何在Windows下强制git使用LF而不是CR + LF?

    本文翻译自:How do I force git to use LF instead of CR+LF under windows? I want to force git to checkout f ...

最新文章

  1. zblog php版调用代码,zblog PHP分类列表调用方法
  2. ERROR: SonarQube scanner exited with non-zero code: 137
  3. Compile error: Cannot find a C++ compiler that supports both C++11 and the specified C++ flags
  4. JUnit测试框架使用介绍
  5. 认识CSS中高级技巧之元素的显示与隐藏
  6. 【学术分享】推荐一个免费下载外文文献的网站
  7. 警告解决办法:class xxxx has virtual method but non-virtual destructor
  8. ×××计算机信息系统安全保护条例
  9. java上传图片至阿里云oss服务器
  10. Oracle 函数编写
  11. 微信HOOK 1.获取二维码
  12. asp.net 视频教程
  13. 【JS】Day34-35
  14. int bool str (索引,切片) for 循环
  15. BurpSuite抓包手机模拟器APP
  16. [Android]挂断、接听电话
  17. 一体化计算机接口,4.机电一体化计算机接口设计(下).ppt
  18. 长三角成立中国(合肥)知识产权保护中心
  19. spinner实现下拉菜单
  20. 基于单片机的脉冲宽度测量

热门文章

  1. Word2Vec模型详解
  2. linux服务器修改ftp默认21端口方法
  3. erp系统包括哪些模块
  4. flask专题-小说网站开发四(完结)
  5. 让电脑假装蓝屏的C语言,假装电脑坏了 一键让电脑进入蓝屏或重装系统界面方法...
  6. 智能AI机器人AI源码营销机器人电销机器人智能电话机器人拨号机器人语音机器人
  7. 在哪里可以搜索英文文献?
  8. java架构师职责_架构师的主要职责
  9. 抽奖h5小游戏还能这么玩?h5抽奖游戏种类详解
  10. 手把手教你用 Keras 实现 LSTM 预测英语单词发音