原理
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列,即只输出第三列。