linux利用diff和patch优雅的更新文件

原理

patch命令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一 。
具体步骤
1、通过diff生成两个文件的差异文件,即补丁文件。
2、patch就是利用diff制作的补丁来实现 源文件(夹)和目的文件(夹) 的转换

下面开始实战

1、新建两个目录mypro1和mypro2,都包含a.txt和b.txt,mypro1还包含c.txt文件。
在这里插入图片描述
2、利用diff生成补丁文件

diff -Nur mypro1 mypro2 > diff_patch

-r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。
-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
-u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。
在这里插入图片描述
3、通过patch打补丁

patch -p0 < diff_patch

-p0 选项要从当前目录查找目的文件(夹)
-p1 选项 要忽略掉第一层目录,从当前目录开始查找。
在这里插入图片描述
默认是把当前目录下的mypro1目录下的文件同步到和mypro2目录下的文件一致。所以mypro1的c.txt也被删除了。
但是我想将mypro1保持不变,mypro2更新为和mypro1一致呢?
那就在最开始生成diff的时候换个位置呗:diff -Nur mypro2 mypro1 > diff_patch

4、回滚补丁

patch -R -p0  < diff_patch

扩展:

【Linux:利用sort和nuiq、comm求两个文件的差集,交集,并集】
合并两个文件生成新的文件c.txt:cat a.txt b.txt > c.txt
合并两个文件并去掉相同的行(求并集),生成新文件c.txt:cat a.txt b.txt | sort | uniq > c.txt

打印两个文件合并后出现过一次以上,即重复的行:cat a.txt b.txt | sort | uniq -d
这里并不能说等于求两个文件的交集,比如在a.txt出现重复的行,而不在b.txt出现,也会被输出。
-d 表示打印出重复(duplicate)的行
打印出a.txt中重复的行: cat a.txt | sort | uniq -d

-u 表示打印具有唯一性(unique)、不重复的行
打印出a.txt中具有唯一性、不重复的行:cat a.txt | sort | uniq -u

如何求两个有序文件的交集,即两个文件都有出现的?

comm -12 a_sort.txt b_sort.txt

comm如果不附带选项,程序会生成三列输出。第一列包含文件1 特有的行,第二列包含 文件2 特有的行,而第三列包含两个文件共有的行。
-12表示不输出第1列和第2列,即只输出第三列。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用git diff命令可以生成patch文件。具体的命令格式是:git diff 'commit id1' 'commit id2' > 'patch文件名'。其中,'commit id1'和'commit id2'是要比较的两个提交的commit id,'patch文件名'是生成的patch文件的名称。例如,要生成两次提交之间的差异的patch文件,可以使用以下命令:git diff cbc5bbce75795672674cf0cab0282da9ff242899 6479ce609a0b46028cd77ae100b6dcab2eee2d84 > test.patch。这将生成一个名为test.patchpatch文件,其中包含了这两次提交之间的差异。\[1\] #### 引用[.reference_title] - *1* [git diff 比较版本差异生成补丁patch](https://blog.csdn.net/chuyouyinghe/article/details/128056564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [diff & patch 制作及打补丁](https://blog.csdn.net/gjsisi/article/details/17576993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [git diff 生成patch合入代码](https://blog.csdn.net/lyn631579741/article/details/127779346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值