Rsync的一个高级应用

rsync,一个,高级,应用 · 浏览次数 : 156

小编点评

**高级应用背景** **恶心的场景:** * 为了简单起见,很多人为了简单起见,提交数据库的修改不是增量处理,而是全量提交过来。 * 这会导致修改越来越多的,速度越来越慢的情况。 **解决方案:** * 利用 `rsync` 进行一系列的对比与查找,将文件按照目录到指定路径下。 * 这可以有效地提高应用的性能,并减少修改的次数。 **命令解析:** * `rsync -rcn --out-format="%n" /myapp/${before}/ /myapp/${now}/ |grep -v \"/$\"|xargs -I{} rsync -R /myapp/${now}/./{} /myapp/diff${now}/new` **各选项的含义:** * `--dry-run`:显示命令将做的事情,但不会实际操作。 * `-r`:递归复制子目录,保持目录结构。 * `-C`:与 `cvs` 相关的文件不进行备份恢复,原始的命令内带此选项。 * `-c`:根据文件的`check-sum`比对文件内容是否有修改,快速确定是否需要同步更新。 * `-n`:模拟执行,但不进行实际操作。 * `--out-format="%n"`:输出修改或已存在于目标位置的文件名。 * `/myapp/${before}/`:源目录路径变量 `${before}` 对应某个目录。 * `/myapp/${now}/`:目标目录路径变量 `${now}` 对应某个目录。 * `grep -v \"/$\"`:过滤掉 `grep` 命令中以斜杠(/)结尾的行,剩余的行即为需要同步的文件,而不包括目录。 * `xargs -I{} rsync -r /myapp/${before}/./{} /myapp/diff${now}/old`:使用 `xargs` 将需要同步的文件名作为参数传递给 `rsync` 命令,并根据路径和文件名,把旧版本的文件复制到指定目录 `/myapp/diff${now}/old` 的相对位置。

正文

Rsync的一个高级应用


背景

2019年刚开始接触linux时. 有一个很恶心的场景. 
很多人为了简单起见, 提交数据库的修改(数据结果和预制数据)
都不是增量处理, 都是全量提交过来. 
所以会造成修改越来越多的, 速度越来越慢的情况. 
当时自己就在网上找资料,发现了一个解决方案, 就是利用rsync进行一系列的对比与查找,将文件按照目录到指定路径下.

这样有一个好处. 应用的话 我就知道哪一些文件发生了变化, 进而推动了我这边镜像分层.动态生成加快生成速度的想法
另外一方面非应用 数据库部分就可以利用这个方式仅更新变化的部分. 

命令解析

最原始的作者:
https://my.oschina.net/mengshuai/blog/551379
原作者是 2015年写的文章. 我应该死2019年发现的这个地方.
然后用来进行过一些处理. 

rsync -rcn --out-format="%n"  /myapp/${before}/  /myapp/${now}/ |grep -v "/$"|xargs -I{} rsync -R /myapp/${now}/./{} /myapp/diff${now}/new


这是一个rsync的命令,实现的功能是将从源目录/myapp/${before}/到目标目录/myapp/${now}/之间差异
的文件复制到/myapp/diff${now}/old目录中。下面是具体命令中各选项的含义:

--dry-run:显示这个命令将做的事情,但是不实际操作。
-r:递归复制子目录,保持目录结构。
-C: cvs相关的文件不进行备份恢复, 原始的命令来里面带这个, 我这边不是源码, 是反编译后的,所以需要带着. 
-c:根据文件的check-sum比对文件内容是否有修改, 快速确定是否需要同步更新。
-n:模拟执行,不进行实际操作。
--out-format="%n":输出修改或已存在于目标位置的文件名。
/myapp/${before}/:源目录路径变量 ${before} 对应某个目录。
/myapp/${now}/:目标目录路径变量 ${now} 对应某个目录。
grep -v "/$":过滤掉grep命令中以斜杠(/)结尾的行,剩余的行即为需要同步的文件,而不包括目录。
xargs -i{} rsync -r /myapp/${before}/./{} /myapp/diff${now}/old:使用xargs将需要同步的文件名作为参数传递给rsync命令,
并根据路径和文件名,把旧版本的文件复制到指定目录/myapp/diff${now}/old 的相对位置。
其中 {} 为zarfs占位符变量,用以读取从上一行 grep -v "/$"得到的源目录文件名列表中每行文件名。

命名说明

上一个命令解析其实是 chatgpt 给解析的.
其实我也尝试过, 自己也可以将命令准确的进行解释. 

chatgpt 的确是一个生产力工具. 
但是我感觉还是尽量能够有自己的思维去理解会更好一些. 

grep xargs rsync 其实都是自己常用的命令.  理论上自己也可以写的出来
还是要加强自己的学习. 

与Rsync的一个高级应用相似的内容:

Rsync的一个高级应用

Rsync的一个高级应用 背景 2019年刚开始接触linux时. 有一个很恶心的场景. 很多人为了简单起见, 提交数据库的修改(数据结果和预制数据) 都不是增量处理, 都是全量提交过来. 所以会造成修改越来越多的, 速度越来越慢的情况. 当时自己就在网上找资料,发现了一个解决方案, 就是利用rsy

Rsync原理的学习与总结

Rsync原理的简单学习 前言 工作这么多年, 感觉对自己帮助最大的是rsync. 用了很多rsync的脚本, 甚至因为这个脚本授权了两个专利. 但是昨天晚上在跟高手聊天时发现 自己对rsync 其实不了解. 对他底层的一些算法和实现,其实都是不清不楚的. 说实话感触挺深的. 以后自己用东西,还是必

[转帖]Linux文件夹对比并提取的差分文件技巧-rsync的妙用

https://www.xitongjiaocheng.com/linux/2017/45720.html 需求 最近团队正在开发一个版本对比工具,要求是把A1文件夹与A2对比,将A2中的增量部分,输出到update文件夹中,生成增量升级包/差分包。 方案研究 实现该功能的第一反应是,分别遍历2个文

[转帖]rsync参数详解

最近经常需要传送文件,学习到rsync这个非常好用的工具。rsync的传输方不像是scp复制粘贴,而是是创建一个镜像,所以在传输效率上比scp命令要快很多,缺点就是对文件的属性如权限、用户、组、时间戳等会忽略,但是加上相关参数就可以很好的使用。在scp传输的过程/mnt和/mnt/在传输之后都会存在

[转帖]Windows平台下使用 Rclone 挂载 OneDrive 为本地硬盘

https://zhuanlan.zhihu.com/p/139200172 Rclone (rsync for cloud storage) 是一个命令行程序,用于同步文件和目录,支持常见的 Amazon Drive 、Google Drive 、OneDrive 、Dropbox 等云存储。本文

[转帖]Linux文件分发脚本,只需一条命令将你的文件分发到各个服务器上

https://zhuanlan.zhihu.com/p/438457921 背景 在运维或在日常工作生活中,我们经常会把一个文件拷贝到其它服务器上,或同时分发到多个服务器上,甚至要求目标机将文件放在相同的路径下,方便程序进一步调用。 遇到这种问题,我们通常的做法是使用scp或rsync命令把文件拷

[转帖]使用cwRsync在Windows的目录之间增量同步文件

https://www.qiansw.com/using-cwrsync-in-the-windows-directory-between-the-incremental-synchronization-file.html rsync 是 Linux 上的一款文件同步工具,他可以以其特有的算法,对两

[转帖]01-rsync备份方式

https://developer.aliyun.com/article/885783?spm=a2c6h.24874632.expert-profile.284.7c46cfe9h5DxWK 简介: Rsync备份方式 1.rsync概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步

[转帖]lsyncd实时同步搭建指南——取代rsync+inotify

lsyncd实时同步搭建指南——取代rsync+inotify https://segmentfault.com/a/1190000002737213 1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify + r

[转帖]03-rsync传输模式(本地传输、远程方式传输、守护进程模式传输)

https://developer.aliyun.com/article/885801?spm=a2c6h.24874632.expert-profile.282.7c46cfe9h5DxWK 简介: 1.Rsync传输模式 rsync大致使用三种主要的数据传输方式 本地方式 远程方式 守护进程 1