使用cwRsync在windows和linux之间同步文件

1、背景

在做linux服务器上的开发项目时,本来可以直接使用远程的vim+tmux作为自己的IDE,但是最近网络不是很好,所以构想还是在本地用windows+eclipse进行开发,等待网络稳定时,使用rsync同步两边文件夹,再到linux环境上去调试代码。

2、eclipse需要的设置

2.1设置eclipse的换行符

eclipse模式使用操作系统的换行,改成unix模式的(window->preference):


image.png

如果是已经存在的文件,怎么修改换行?(File-->Convert line Delimeters)

2.2设置python的缩进

python的缩进在linux中设置的是4个空格,在eclipse中也改过来(preference->Editors->Text Editors)


image.png

同时将tab改为4个空格,在pydev的设置中改过来


image.png

3 cwRsync的使用

参考的教程:

在考虑使用Rsync的时候本来也考虑使用git或者svn的,但是我的linux上本来就是用git管理的,所以为了不那么复杂,想直接使用rsync在linux和windows之间进行文件夹的同步。

3.1安装cwRsync

windows下的rsync软件是cwRsync,因为自带了cygwin,所以下载下来之后解压直接可用,最好把bin目录添加到环境变量:


image.png
3.2 rsync ssh模式

最直接使用rsync的方式就是ssh模式了,缺点是每次都需要输入密码。

通过ssh推送本地目录到远程目录:

rsync -avz --delete -e 'ssh -p 28949'  --chown=0:0 /cygdrive/d/workspace/rsync_test
 root@47.89.xxx.xxx:/root
  • ssh可以使用非默认端口
  • cygdrive是一个增加的根目录,windows本来没有这个,/cygdrive/d/表示windows下的d盘
  • avz是默认参数,可以加上--delete会在文件夹中进行强制同步(删除远程端文件)
  • chown可以设置推送过去的文件的user和group名,由于windows没有这个东西,我直接设置root:root会失败,不过可以设置用户名和组名的编号

通过ssh拉取远程目录到本地目录

rsync -avz -e 'ssh -p 28949'  root@47.89.xxx.xxx:/root/rsync_test /cygdrive/d/workspace
3.3 rsync daemon模式

除了使用ssh每次输入密码之外,还可以使用rsync的daemon模式,更加安全(不能随便指定任意的远程目录),也更加复杂,如果要使用daemon模式在window和linux双向同步数据,需要在linux和windows上都启动rsync server

在linux上设置rsync server,需要参考的文档 https://download.samba.org/pub/rsync/rsyncd.conf.html
配置/etc/rsyncd.conf

uid = root
gid = root
max connections = 4 
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

#下面这个模块区域可以配置多个,每一个代表一个允许同步的path
[logs]
path = /root/
ignore errors
read only = no
list = true
auth user = root
secrets file = /etc/rsyncd.pwd

同时设置/etc/rsyncd.pwd

root:rootpassword

在linux上启动和停止rsync daemon

#启动,会打开端口873
rsync --daemon
#停止rsync daemon
pkill rsync

启动之后可以在windows上进行推送了,推送的目标设置为logs,在配置文件中,logs会对应到指定的path

rsync -avzP  --chown=0:0 --password-file=/cygdrive/d/XXX  /cygdrive/d/workspace/rsync_test root@47.89.xxx.xxx::logs 
PAUSE

4 cwRsyncServer在windows上开启daemon

在windows上开启daemon模式可能是另一个故事了,可以阅读参考教程中的第三个,由于我暂时用不到,就先略过

5 补充几点

应用起来的时候还出现几个问题,需要补充一下

5.1 关于rsync版本

在我的linux服务器centos7上的rsync是3.0.9,有很多功能都没有,还需要进行一波手动升级,升级到3.1.2就好了。升级流程是简单的./configure, make, make install

5.2 windows到linux chmod的问题

在windows里面的文件权限和linux是很不一样的,rsync将windows文件同步到linux时默认使用的是755权限,如果需要修改,可以使用--chmod参数

rsync -avzP  --chown=0:0 --chmod=644 /cygdrive/d/workspace/test root@192.168.xx.xx::test

#还有一种更先进的chmod方式,可以指定到具体的文件夹和文件
--chmod=Dg+s,ug+w,Fo-w,+X
--chmod=D2775,F664
#D代表目录,F代表文件,ugo,应该代表user、group、other
5.3 exclude排除同步文件夹,文件

在rsync一个目录的时候,可以手动的排除其中的某一些文件和子目录

rsync -avzP  --chown=0:0 --chmod=644 --exclude='Suite' /cygdrive/d/workspace/test root@192.168.xx.xxx::test

推荐阅读更多精彩内容