编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

rsync如何查看源目录有哪些新增文件?

wxchong 2024-07-16 10:29:31 开源技术 11 ℃ 0 评论

一、需求分析:

假设有这样一个需求:

  1. 使用rsync同步A目录到B目录;

  2. 下次同步之前想知道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】显示传输进度;

二、解决思路:

  1. --delete选项,可以删除在SRC中没有的,但是在DEST中存在的文件

    那么当A目录【SRC=A】同步到B目录【DEST=B】之后,A目录中新增了一些文件,这个时候如果反过来将B目录【SRC=B】作为源路径同步到A目录【DEST=A】,然后加上--delete选项,就可以达到将A目录中存在的文件但是B目录中没有的文件进行删除:B目录没有,A目录有的文件不就是意味着A目录新增的文件吗?

  2. 如果仅仅加上--delete选项,那就会删除A目录中新增的文件,因此需要使用【-n】选项与之配合,达到显示将要删除哪些文件,这样就达到了我们的目的。

需要注意的:

  1. 需要指定-r选项才能对子目录递归处理,一般我们指定了-a选项就包含了-r选项;

  2. 当然还是需要指定-v选项,不指定就看不到相关信息;

  3. 一定一定不要忘记-n选项;

三、实验测试:

测试环境:Windows 2003 、cwrsync 5.5

A目录树形结构如下:

D:\A

│ 第一次同步.txt

└─第一次同步目录

第一次同步.txt

B目录为空;

  1. 首先执行同步A目录到B目录:

    rsync -av /cygdrive/d/A/ /cygdrive/d/B/

    同步后,B目录结构与A目录一致;

  2. 然后在A目录增加一些文件和目录:

  3. 测试反向同步B到A,加上-n选项:

    上图可以看到,没有需要传输的文件;

  4. 测试反向同步B到A,加上--delete选项,注意千万不要少了-n选项,否则将删除掉A目录中新增的文件:

经过以上验证了可以通过--delete选项,用-a、-v、-n、选项来配合达到查看A目录中新增了那些文件的目的,3个配合选项缺一不可:

  1. 没有-a选项:将会报错

    -a选项本身包含了-r选项,可以直接使用-r选项:

  2. 没有-v选项:什么都不显示

  3. 没有-n选项,会将A目录中新增的文件删除掉【一定要注意,千万不能漏掉-n选项:实验前做好备份工作,命令测试无误后,使用复制粘贴的方式防止忘记输入-n选项,避免造成误删除文件。

  4. 注意本文所有rsync命令中,源路径中后边都有【/】,有【/】和没有【/】是大不相同的,这点很重要下次单独加以说明。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表