Windows 10下同步文件夹备份的一种方案

对于软件工程师来叫高效率、低成本的备份方案太重要了,相信大部分人都有盘毁码完的经历,这里介绍一种方案:

一些常用方案的优缺点

  • 文件拷贝
    优点: 操作简单明了
    缺点:效率低下,由于一些中间编译文件都被拷贝过去了,往往极大的浪费了硬盘空间,而且备份时间可能过长

  • 版本控制
    通过git, performance, CVS, SVN等
    优点:功能强大,可以协同进行开发,完善的版本控制,代码diff, merge等功能
    缺点:

    1. 对于一个人进行的前期或者私密开发,代码还不太想公开
    2. 需要搭建服务器,而且以后恢复数据,还得通过客户端和服务器来恢复数据,还是显得有点麻烦
    3. 还得自己选择要check in的文件,有点麻烦

这里介绍一种简单方案

  • 本方案的优点:

    1. 一键备份,每天都可以进行
    2. 对于编译过程中生成的文件进行忽略
    3. 只同步变化的文件
  • 方案需求

    1. 安装wsl (Windows Subsystem for Linux)
      在Windows Store中查找ubuntu,安装好后,所有的widows的盘符,都被映射到/mnt/下
      比如C盘,就是/mnt/c,这样你就可以在wsl下面访问windows系统的文件了。
    2. 准备一块备份硬盘
      此硬盘仅仅作为备份用,请不要用其他软件更新数据,或者在备份硬盘上工作
      一旦在新的环境中工作,请尽量拷贝到工作电脑的硬盘,再对其进行改动。
      一块大容量的移动硬盘价格一般不到1000元,坏掉一块硬盘,对应数据恢复成本都是上千元,甚至几千元,而且还得再买一块新硬盘把数据恢复拷贝回来,还是额外准备一块备份移动硬盘划算。
      当然备份硬盘最好也是每4·5年换一次。

本方案使用linux rsync命令,先介绍一些rsync的常用用法

  • 把/mnt/d/rsynctest/A sync到/mnt/d/rsynctest/B, A作为B的子目录
rsync -avP /mnt/d/rsynctest/A /mnt/d/rsynctest/B
  • 同上,只不过把A下所有的文件和目录sync到/mnt/d/rsynctest/B
rsync -avP /mnt/d/rsynctest/A/ /mnt/d/rsynctest/B
  • 同上,不要拷贝以.obj, *.ilk为后缀的文件名
vim exclude_list.txt
*.ilk
*.obj
:w
rsync -avP --exclude-from exclude_list.txt /mnt/d/rsynctest/A/ /mnt/d/rsynctest/B
  • 同上,不要拷贝以.obj, *.ilk和folder为release或者debug的所有文件名和目录
vim exclude_list.txt
*.ilk
*.obj
release/*
debug/*
:w
rsync -avP --exclude-from exclude_list.txt /mnt/d/rsynctest/A/ /mnt/rsynctest/B

5.有时候有很复杂的要求,比如:
同上,不要拷贝*.obj, *.ilk, 和不区分大小写的排除debug和release目录,但是目录下的.c/.cpp等源代码文件还需要继续保持

vim filter.txt
+ *.cpp
+ *.asm
+ *.c
+ *.cxx
+ *.h
+ *.hpp
+ *.hxx
+ *.java
+ *.inl
+ *.def
+ *.idl
+ readme.txt
- *.ncb
- *.sbr
- *.ilk
- *.sdf
- *.pdb
- *.ipdb
- *.obj
- *.iobj
- *.bsc
- *.idb
- *.exe
- *.lib
- *.dll
- *.cache
- *.lastbuildstate
- *.tlog
- *.so
- *.suo
- *.[vV][cC].[dD][bB]
- */[dD][eE][bB][uU][gG]/*
- */[rR][eE][lL][eE][aA][sS][eE]/*
- */ipch/*
:w

rsync -avP --filter="merge filter.txt" /mnt/d/rsynctest/A/ /mnt/d/rsynctest/B

最后要说的就是通过最后一种方式来备份,为要备份的folder,创建一个filter.txt,然后就通过一个命令好就备份对应的folder好了,如果大家都是用一个规则,就用一个filter.txt就行了。

下班前半个小时,运行一下命令,一切OK

rsync -avP --filter="merge filter.txt" /mnt/e/ /mnt/h

假设被备份的盘是e盘,备份盘是h盘

你可能感兴趣的:(Windows 10下同步文件夹备份的一种方案)