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

linux,文件夹,对比,提取,差分,文件,技巧,rsync,妙用 · 浏览次数 : 0

小编点评

**STEP 1:创建增量文件** 使用 `rsync --dry-run -rcnC --out-format="%n" %N%s A1.1/ & A1.0/` 命令,其中 `N` 是 `%N` 的缩写, `s` 是 `%s` 的缩写。这将创建一个与 `A1.0` 相同结构的增量文件,其中包含所有与 `A1.0` 相似的文件和目录。 **STEP 2:使用 `grep` 命令过滤文件** 使用 `grep -v\"/$\"` 命令过滤 `out` 文件,以删除以 `/` 结尾的文件。 **STEP 3:使用 `xargs` 命令进行文件复制** 使用 `xargs -I{} rsync -R A1/./{} out/` 命令,其中 `I{}` 是 `%N` 的缩写, `{}` 是 `%s` 的缩写。这将将所有与 `A1.0` 相似的文件和目录复制到 `out` 目录中。

正文

https://www.xitongjiaocheng.com/linux/2017/45720.html

 

 

需求

最近团队正在开发一个版本对比工具,要求是把A1文件夹与A2对比,将A2中的增量部分,输出到update文件夹中,生成增量升级包/差分包。


方案研究

实现该功能的第一反应是,分别遍历2个文件夹,进行单个文件对比是否存在于MD5比对,并输出结果,但是这个绝对是最低级做法,并且时间复杂度为O(n2),基本上就是直接否定。

后来深入研究了内核补丁常用的diff + patch方案,即

diff -urNa dir1 dir2

生成了差异文件后,用patch命令进行文件的复制或者文件内容修改。这个很明显如果要实现需求还是要去人工代码解析diff的结果才行。也是复杂了。

突然。或者是说类似动画片里面柯南那句masaka 搭配场景闪现的效果出现了...

能分析出文件夹差异,还能支持多种对比模式checksum、mod-time、size的,还能过滤掉svn不需要提交的二进制文件、中间文件,经常用于服务器端增量同步的,不就是rsync么。。。(该处rsync应该字号放大十倍,但是markdown改不了)

现在唯一要解决的问题是,rsync是从A文件夹同步到B文件夹,是否可以重定向这个同步的文件到C文件夹而不改变B文件夹内容呢?

翻看了rsync man之后oh ~ 这个--dry-run参数是演示trial的意思。。也就是说使用了dry-run就只能看,不会变了。
马上开始coding。


STEP1

A1.1是新文件夹,A1.0是旧文件夹,out是放置 A1.0到A1.1的保持目录结构的增量文件。

rsync --dry-run -rcnC --out-format="%n"  A1.1/  A1.0/

注意该处的-C参数是按照cvs的ignore规则来过滤不需要同步的文件,在CVS中,默认是不会提交二进制文件的,所以如果需要进行二进制文件提取,那就不要加C.
执行了该命令后,得到了一个A1目录的文件列表:
A1.1/system/app/
A1.1/system/app/A.apk
A1.1/system/app/B.apk
A1.1/system/app/C.apk
也就是差异文件,由于这里默认会显示出文件夹,所以要过滤掉以『/』结尾的文件夹的显示

rsync --dry-run -rcnC --out-format="%n"  A1.1/  A1.0/ |grep -v"/$"

这样就得到了一个纯增量文件的列表


STEP2

有了文件列表,复制的操作方法就很多了。可以继续使用rsync同步到新的out目录,以防止多次执行后错误文件修复问题

rsync --dry-run -rcnC --out-format="%n"  A1.1/  A1.0/ |grep -v"/$"|xargs -I{} rsync -R A1/./{} out/

搞定!


总结

其实我们身边有很多常用的工具,具备强大的功能。其实作为程序猿这个群体,『浮躁』是一个界限将高手与菜鸟分开。其实高手并不是掌握了多少语言,懂了多少模式、收藏了多少的开源代码工具...
而是需要踏踏实实走好每一步。

 

与[转帖]Linux文件夹对比并提取的差分文件技巧-rsync的妙用相似的内容:

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

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

[转帖]Linux中查看各文件夹大小命令du -h --max-depth=1

https://www.cnblogs.com/the-tops/p/8798678.html 最近排查服务器异常的时候,常会遇到磁盘慢的情况,这个时候,查找那个文件夹占用的内存的时候常用到这个命令:du -h --max-depth=3 一般的文件夹都超不过4层; 具体使用的时候,可以根据当前路径

[转帖]使用S3F3在Linux实例上挂载Bucket

https://docs.jdcloud.com/cn/object-storage-service/s3fs S3F3是基于FUSE的文件系统,允许Linux 挂载Bucket在本地文件系统,S3fs能够保持对象原来的格式。使用S3F3可以把Bucket当成一个文件夹挂载到Linux系统内部,当成

[转帖]Linux:CPU频率调节模式以及降频方法简介

概述 cpufreq的核心功能,是通过调整CPU的电压和频率,来兼顾系统的性能和功耗。在不需要高性能时,降低电压和频率,以降低功耗;在需要高性能时,提高电压和频率,以提高性能。 cpufreq 是一个动态调整cpu频率的模块,系统启动时会生成一个文件夹 /sys/devices/system/cpu

[转帖]在 virt-manager 的主机和客户机之间共享文件夹

https://linux.cn/article-15470-1.html 在本指南中,你将学习如何在 virt-manager 的 KVM、QEMU 和 libvirt 的主机和客户机之间共享文件夹。 virt-manager 应用或软件包使用 libvirt 库来提供虚拟机管理服务。它有一个桌面

[转帖]50个应知必会的Linux常识和操作

1.存放用户账号的文件在哪里? /etc/passwd 1 2.如何删除一个非空的目录? rm -rf 目录名 1 3.查看当前的工作目录用什么命令? pwd 1 4.创建一个文件夹用什么命令? mkdir 1 5.哪个Linux命令可以一次显示一页内容?上一页和下一页使用什么命令? more Sp

[转帖]JMETER性能监控之serverAgent

对linux服务器的服务进行压测时,服务器的运行情况可以通过添加插件serverAgent来观察,可以实时监控性能指标。 1 (一)环境准备 1、下载zip包ServerAgent-2.2.3.zip 2、在服务器中,创建一个文件夹serveragent,名字随便起 mkdir serveragen

[转帖]Linux 磁盘I/O 调度算法 说明

2022-08-23 13:031361转载Linux 1 Linux 4.0 IO协议栈框架图 I/O 调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。 Linux 4.0 IO协议栈框架图 I/O调度程序的总结 当向

[转帖]Linux中常见IO调度器

https://www.jianshu.com/p/3c16e39a005a 单队列调度算法多队列调度算法 deadline mqdeadlines cfq bfq noop none kyber 对于磁盘I/O,Linux提供了cfq, deadline和noop三种调度策略 cfq: 这个名字是

[转帖]Linux 平台使用shc 工具加密shell 脚本

2021-08-03 20:4510030原创Linux 本文链接:https://www.cndba.cn/dave/article/4642 1 shc 工具说明 shell 脚本是常用脚本,运维中经常使用,但有时候在shell 脚本中会包含一些敏感的信息,比如密码或者特殊的参数,此时我们就可以