使用Linux中不同目录中的文件应用patch命令

时间:2010-12-15 19:25:11

标签: linux command-line diff command patch

我正在尝试使用不同目录中的2个文件应用补丁。输出文件也应该在不同的目录中。第一个文件位于 /var/local/documents/document.xml ,补丁文件位于 /var/local/patches/patch.diff ,我想要输出文件应该在 /var/local/final/final.xml 中创建。

当文件位于同一目录中时,此命令有效:

patch document.xml -i patch.diff -o final.xml

但是当它们位于不同的目录中时,我尝试使用以下命令:

  

补丁   /var/local/documents/document.xml -i   /var/local/patches/patch.diff -o   /var/local/final/final.xml

我收到以下错误:

(Stripping trailing CRs from patch.)
patching file {file}
Hunk#1 FAILED at 20.
1 out of 1 hunk FAILED -- saving rejects to file {file}

我已经读过某些地方,我应该使用-d和-p来正确使用目录,但我不知道应该怎么做......

2 个答案:

答案 0 :(得分:5)

是的,它是 -p 开关(在您的情况下,它应该从补丁路径中删除2个条目):

cd /var/local/documents
patch -p 2 -o ../final/final.xml document.xml < ../patches/patch.diff

答案 1 :(得分:1)

试试这个:

$ mv /var/local/final/final.xml /var/local/final/document.xml
$ (cd /var/local/final && patch document.xml) < patch.diff
$ mv /var/local/final/document.xml /var/local/final/final.xml