一、需求分析:
假设有这样一个需求:
使用rsync同步A目录到B目录;
下次同步之前想知道A目录新增了那些文件该如何办?
废话不多说,开始之前,先来看几个选项:
【--delete】:删除那些在DEST中存在,而在SRC中没有的文件;
【 -n, --dry-run】进行试验运行,不进行同步;(仅仅显示一下将有哪些处理动作,例如将要传输哪些文件、将要删除哪些文件)
【-a, --archive】 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD;
【-r, --recursive】 对子目录以递归模式处理;
【-v, --verbose 】显示传输过程更详细信息,可以使用增加v的个数来显示更多信息,如-v、-vv ,2个v将显示关于被跳过文件的信息和稍微更多一点的信息,一般2个以上的的v用来做调试;
【-P 】大写P,相当于--partial --progress两个选项一起用,为长时间传输可能遇到中断的情况指定--partial --progress两个选项;
【--partial】默认情况下,如果传输中断,rsync将删除已经传输的部分文件,使用该选项告诉rsync保留已经传输的那部分文件;
【--progress】显示传输进度;
二、解决思路:
--delete选项,可以删除在SRC中没有的,但是在DEST中存在的文件
那么当A目录【SRC=A】同步到B目录【DEST=B】之后,A目录中新增了一些文件,这个时候如果反过来将B目录【SRC=B】作为源路径同步到A目录【DEST=A】,然后加上--delete选项,就可以达到将A目录中存在的文件但是B目录中没有的文件进行删除:B目录没有,A目录有的文件不就是意味着A目录新增的文件吗?
如果仅仅加上--delete选项,那就会删除A目录中新增的文件,因此需要使用【-n】选项与之配合,达到显示将要删除哪些文件,这样就达到了我们的目的。
需要注意的:
需要指定-r选项才能对子目录递归处理,一般我们指定了-a选项就包含了-r选项;
当然还是需要指定-v选项,不指定就看不到相关信息;
一定一定不要忘记-n选项;
三、实验测试:
测试环境:Windows 2003 、cwrsync 5.5
A目录树形结构如下:
D:\A
│ 第一次同步.txt
│
└─第一次同步目录
第一次同步.txt
B目录为空;
首先执行同步A目录到B目录:
rsync -av /cygdrive/d/A/ /cygdrive/d/B/
同步后,B目录结构与A目录一致;
然后在A目录增加一些文件和目录:
测试反向同步B到A,加上-n选项:
上图可以看到,没有需要传输的文件;
测试反向同步B到A,加上--delete选项,注意千万不要少了-n选项,否则将删除掉A目录中新增的文件:
经过以上验证了可以通过--delete选项,用-a、-v、-n、选项来配合达到查看A目录中新增了那些文件的目的,3个配合选项缺一不可:
没有-a选项:将会报错
-a选项本身包含了-r选项,可以直接使用-r选项:
没有-v选项:什么都不显示
没有-n选项,会将A目录中新增的文件删除掉【一定要注意,千万不能漏掉-n选项:实验前做好备份工作,命令测试无误后,使用复制粘贴的方式防止忘记输入-n选项,避免造成误删除文件。】
注意本文所有rsync命令中,源路径中后边都有【/】,有【/】和没有【/】是大不相同的,这点很重要下次单独加以说明。
本文暂时没有评论,来添加一个吧(●'◡'●)