如何让patch(1)自动使用+++对应的文件,无需手动输入?
问题描述
生成大型补丁集后,使用patch -Np1 -i命令应用时出现以下提示:
can't find file to patch at input line 3 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |--- src 2024-03-09 15:47:51.145613870 +0100 |+++ dest 2024-03-09 16:03:27.723860711 +0100 -------------------------- File to patch:
手动输入+++对应的文件名后补丁可正常应用,但补丁集包含大量文件,手动操作效率极低,且patch本应自动识别目标文件。尝试-t选项无效,询问是否有办法让patch自动使用+++对应的文件作为补丁目标。
解决方案
以下是几种可行的解决方法:
方法1:批量修改补丁文件中的原文件路径
补丁默认会寻找---行指定的原文件(这里是src),但你的目标文件是+++行的dest。可以用sed批量将补丁中所有---行的src替换为dest,让patch自动匹配目标文件:
sed -i 's/^|--- src/|--- dest/' 你的补丁文件名.patch
修改完成后,重新执行patch -Np1 -i 你的补丁文件名.patch即可自动应用所有补丁。
方法2:创建软链接映射原文件路径
如果不想修改补丁文件,可以临时创建一个src目录,将dest下的所有文件软链接到src中,让patch能找到对应的原文件:
mkdir src ln -s ../dest/* src/ patch -Np1 -i 你的补丁文件名.patch rm -rf src
补丁应用时会修改src下的软链接文件,实际作用的是dest目录中的真实文件,完成后删除临时的src目录即可。
方法3:直接指定目标文件(单文件场景)
如果是单个文件的补丁,也可以直接在命令中指定目标文件,跳过交互提示:
patch -Np1 -i 你的补丁文件名.patch dest
但该方法不适用于大量文件的补丁集。
内容的提问来源于stack exchange,提问作者glowiak
相关产品推荐
相关产品推荐

