rsync 是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件。在这种场景下,rsync 远比 cp 命令更加合适,它只会同步需要更新的文件,默认情况下,rsync 通过比较文件的最后修改时间(mtime)和文件的大小(size)来确认哪些文件需要被同步过去。

最近刚好有一个需求,需要将文件从一个目录同步到另外一个目录去,我就首先试了下下面的命令:

# mkdir src dest
# echo hello > src/one.txt
# rsync --stats src/1.txt dest

这里加上 --stats 的目的是为了显示文件传输的详细信息。执行完成后文件已经同步到目标目录,非常简单,但是如果再执行一次,我们会非常尴尬地发现文件被再次同步过去:

# rsync --stats src/one.txt dest

Number of files: 1
Number of files transferred: 1
Total file size: 6 bytes
Total transferred file size: 6 bytes
Literal data: 6 bytes
Matched data: 0 bytes
File list size: 21
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 77
Total bytes received: 31 sent 77 bytes received 31 bytes 216.00 bytes/sec
total size is 6 speedup is 0.06

这里的问题让我抓狂很久,百思不得其解。但是如果我们运行时加上 -a 参数,文件就不会重复同步,下面是运行结果:

# rsync -a --stats src/one.txt dest

Number of files: 1
Number of files transferred: 0

翻了下帮助,找到 -a 选项的说明:

# rsync --help | grep -w -- -a
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)

使用这个选项后,会开启 archive mode,这时同步的时候会保留文件的属性,例如权限、用户及组、时间等等。然后,我们回忆下 rsync 如何是比较文件,大概可以猜出问题应该出在时间这一个属性上,准确地说是最后修改时间,也即所谓的 mtime。

那我们接下来,通过实际例子来确认下我们的猜想:

# rm src/one.txt
# rsync src/one.txt dest
# stat -c %y src/one.txt dest/one.txt
2013-10-15 11:28:15.000000000 +0800
2013-10-15 11:28:17.000000000 +0800

果然,不带选项同步时源和目标文件的 mtime 是不一样的,这就导致下次 rsync 的时候,仍然误以为文件需要同步。接下来,我们改变下 dest/one.txt 的 mtime,然后再执行一次:

# touch -r src/one.txt dest/one.txt
# rsync --stats src/one.txt dest Number of files: 1
Number of files transferred: 0

这下 rsync 不会再同步 one.txt 了。当然,还有其它的选项也能够有同样的效果,比如 --update 或者 --size-only,都可以尝试下。

当然大多数情况下,还是建议以下几个选项一起使用:

# rsync -avzS --partial src dest

转载请注明转自: 团子的小窝 , 本文固定链接: rsync 同步文件重复拷贝问题

rsync 同步

相关的文章

http://kodango.com/rsync-always-copy-files

rsync 同步文件重复拷贝问题的更多相关文章

  1. rsync 同步文件

    rsync 同步文件 rsync -avz roo@192.168.4.12::/home/a ./a  --exclude "data" exclude 去掉/a/data 文件 ...

  2. rsync同步文件

    rsync中的参数 -r 是递归 -l 是链接文件,意思是拷贝链接文件:-p 表示保持文件原有权限:-t 保持文件原有时间:-g 保持文件原有用户组:-o 保持文件原有属主:-D 相当于块设备文件: ...

  3. 使用rsync同步文件

    rsync是Unix/Linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输.关于rsync的核心算法,有兴趣的看下这篇文章. 这里介绍一下 ...

  4. Windows服务器之间rsync同步文件

    两台windows7机器 server:192.168.12.104 client:192.168.12.103 目的:将server上的E盘的目录FYFR里面的内容定时同步到client上的D盘下F ...

  5. Git版本控制,rsync同步文件,完成线上部署

    之前项目开发完成,测试阶段,借着此时,由于公司暂时用两台aliyun  ecs  做业务层,所以每次都需要同步线上文件,进而想着搞一搞服务器端(小公司,新项目,先小搞一把),搭建一套小的版本控制上线的 ...

  6. 通过 lsyncd + rsync 同步文件

    通过rsyncd实现将源服务器上的文件同步到目标服务器,通过lsyncd监控源服务器上的文件是否有变动,若有变动调用rsyncd服务对差异的文件进行同步. 0. lsyncd有三种同步文件的方式: ( ...

  7. rsync同步文件到远程机器,卡住10多秒--问题解决过程

    背景 以前大体介绍过,我们这边是做运维平台的.如果要形象化理解,那么,比如jenkins这种喜闻乐见的软件大致了解吧,jenkins就经常需要同步文件/版本包到远程机器上,jenkins怎么实现的,没 ...

  8. rsync同步文件(多台机器同步代码...)

    常用组合   rsync -av --delete-after --exclude-from="a.txt"  x/x -e ssh x:/x/x   a.txt 制定忽略的文件, ...

  9. 【Linux】rsync同步文件 & 程序自启动

    rsync使用 1. 为什么使用rsync? rsync解决linux系统下文件同步时, 增量同步问题. 使用场景: 线上需要定时备份数据文件(视频资源), 使用rsync完成每天的增量备份. 参见: ...

随机推荐

  1. 分享几个自己喜欢的前端UI框架

    http://www.layui.com/ http://element-cn.eleme.io/#/zh-CN/component/installation

  2. 基于ABP的Easyui admin framework正式开放源代码

    下载&反馈:http://www.webplus.org.cn v1.0 (2016/9/21) EF6+MVC5+API2+Easyui1.4.2开发 后台管理不使用iframe,全ajax ...

  3. 第一章、 CLR的执行模型

    1. 概述 本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作. 2. 名词解释 ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运 ...

  4. css:段落文本两端对齐

    效果图: Css:

  5. iOS 播放本地,网络视频

    /** *  创建媒体播放控制器MPMoviePlayerControlle 可以控制尺寸 * *  @return 媒体播放控制器 */ -(MPMoviePlayerController *)mo ...

  6. iOS开发XML解析

    xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundat ...

  7. Java replaceAll不区分大小写

    Java 中replaceAll如何忽略大小写呢? 方式一:在正则表达式前面添加(?i) @Test public void test_replaceAll33(){ String input = & ...

  8. sql通过 openrowset查询csv文件

    两步即可完成 第一步. 创建cmmData.xml文件,并存入到能与sql服务器共享的文件夹中(如:\\10.252.21.6\sharedfolder) <?xml version=" ...

  9. codevs 5438 zbd之难题(水题日常)

     时间限制: 1 s  空间限制: 1000 KB  题目等级 : 白银 Silver 题目描述 Description zbd想要一个计算器,请你编一个计算器. 输入描述 Input Descrip ...

  10. typescript知识教程

    https://ts.xcatliu.com/basics/type-of-function.html