如何创建可识别空目录的diff补丁并应用至old目录?
正确使用diff创建补丁并同步old目录的方法
当前目录结构
$ tree . ├── new │ └── dir1 └── old
问题原因分析
你尝试的两个命令均未达到预期效果,具体原因:
- 执行
diff -ruN old new | patch -s -p0 -t后old无变化:diff -ruN会将old中不存在的目录视为空目录生成对比内容,但默认的patch不会自动创建新目录,因此无法同步新增的dir1。 - 执行
diff -ru old new | patch -s -p0 -t报错:因为old中没有dir1,diff不会生成任何有效差异补丁,导致patch识别输入为无效数据。
正确操作命令
要让old同步new的目录结构,需要让patch自动创建所需目录,使用以下命令:
diff -ruN old new | patch -s -p0 -t --mkdir && tree
执行后目录结构会更新为:
. ├── new │ └── dir1 └── old └── dir1
替代方案(针对不支持--mkdir的patch版本)
如果你的patch工具没有--mkdir参数,可以先手动创建目标目录,再应用补丁:
mkdir -p old/dir1 diff -ruN old new | patch -s -p0 -t && tree
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

