Linux下同步文件夹:如何保留最后修改文件避免覆盖
用rsync实现双向保留最新文件的同步方案
嗨,这个问题我之前折腾rsync的时候也碰到过!默认的rsync -av是单向从源到目标同步,不管目标文件是不是更新,都会直接覆盖,确实不符合你的需求。下面给你两种场景的解决方案:
单向同步:只把源文件夹的新文件同步到目标,不覆盖目标的更新文件
如果你只是想从文件夹A同步到B,但要保留B里比A新的文件,只需要给命令加个-u(也就是--update)参数就行:
rsync -avu /path/to/folderA/ /path/to/folderB/
-u的作用就是让rsync自动跳过目标文件夹里最后修改时间比源文件晚的文件,完美避免覆盖更新的内容。
双向同步:两边互相同步,保留各自最新的文件
如果你的需求是让两个文件夹完全同步,不管文件在A还是B,只要是最新版本就保留并同步到另一边,那需要执行两次rsync命令,分别双向同步:
# 先把A中比B新的文件同步到B rsync -avu /path/to/folderA/ /path/to/folderB/ # 再把B中比A新的文件同步到A rsync -avu /path/to/folderB/ /path/to/folderA/
跑完这两条命令,两个文件夹里的所有文件都会是各自最新的版本,两边的更新内容都不会丢失。
几个小提醒
- 路径末尾的
/别漏:如果源路径最后加了/,rsync会把源文件夹里的内容同步到目标文件夹;如果不加,会把源文件夹整个复制到目标文件夹下面,别搞错了! -a参数已经包含了权限、所有者、时间戳这些属性的同步,不用额外加其他参数;- 千万不要加
--delete参数,不然会删掉两边独有的文件,不符合你保留文件的需求。
内容的提问来源于stack exchange,提问作者Francisco Sobrinho
相关产品推荐
相关产品推荐

