昨天验证一个补丁,补丁是以old/new形式给出的,需要自行合入到代码工程中去,得到建议说可以把new文件夹中的东西拷贝到工程中即可,但对比了new文件夹与工程中对应文件夹的内容,涉及到三方面
1.new文件夹中有新增的独有文件
2.new文件夹与工程同名代码部分需要覆盖
3.原工程文件夹独有的文件需要保留
忽然一下没了头绪,因为发给客户的补丁不能出错,怕自己对比来对比去最终晕头转向,又得到建议可以在linux下用cp -r命令,虽然用惯了cp -r,但是都是往空白处拷贝,潜意识认为cp -r命令会覆盖整个目标,但是结果并不是如此
由此模拟了一个简单的场景,看看cp -r到底是什么行为
先把cp的选项罗列如下:
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
自建场景如下:
两个文件夹source和dest
----------------------------------------------------------
source中有两个文件夹:one和two
one中有文件1.txt(内容为source:1.txt); one中有文件1_source.txt(内容为1_source.txt)
two中有文件2.txt(内容为source:2.txt); two中有文件2_source.txt(内容为2_source.txt)
-----------------------------------------------------------
de