styts Asked: 2010-01-14 07:46:40 +0800 CST2010-01-14 07:46:40 +0800 CST 2010-01-14 07:46:40 +0800 CST 应用多个 .patch 文件 772 我有一个包含.patch文件的目录,使用 diff 生成。 我想将所有这些补丁应用patch -p1到另一个目录。 但是补丁只需要一个文件,除非我cat. xargs使用或类似工具应用多个文件的命令是什么。 bash diff patch-management xargs 5 个回答 Voted James 2010-01-14T07:58:37+08:002010-01-14T07:58:37+08:00 假设您正在使用 bash/sh/zsh 等... cd /path/to/source for i in /path/to/patches/*.patch; do patch -p1 < $i; done Ben 2019-04-04T09:50:37+08:002019-04-04T09:50:37+08:00 接受的答案对我不起作用,似乎假设补丁可以在一个命令行上获取多个补丁文件。我的解决方案: find /tmp/patches -type f -name '*.patch' -print0 | sort -z | xargs -t -0 -n 1 patch -p0 -i 查找:查找补丁文件 /tmp/patches:搜索补丁文件的目录 -type f:仅文件 -name '*.patch':以 .patch 结尾的文件 -print0:将结果作为空终止字符串列表输出到标准输出 排序:对补丁文件进行排序,以便保持顺序(例如 001 在 002 之前) -z:输入为空终止(因为我们使用了-print0) xargs:使用标准输入作为参数调用补丁 -t:在运行之前打印命令,可以将其删除以减少冗长 -0:stdin 是一个以 null 结尾的列表 -n 1:为列表中的每一项再次调用补丁(例如调用补丁N次,而不是构建列表并调用一次) -i:patch 的参数告诉它参数将是补丁文件 Best Answer Dennis Williamson 2010-01-14T07:58:41+08:002010-01-14T07:58:41+08:00 如果cat有效,为什么不使用它? 使用find和xargs: find dirname -name namespec -print0 | xargs -0 patch patchargs 例子: find src/networking -type f -name 'network*.patch' -print0 | xargs -0 patch -p2 l0b0 2016-06-18T00:46:20+08:002016-06-18T00:46:20+08:00 这实际上有效(在 Bash 中): shopt -s globstar for file in /path/to/patches/**/*.patch do patch -p1 < "$file" done abu_bua 2021-06-12T19:16:43+08:002021-06-12T19:16:43+08:00 Debian 使用一个非常好的工具被称为quilt来管理它的包。 在 Debian/Ubuntu 上安装它 sudo apt install quilt 看看 Shakthi Kannan 的这个非常好的教程:被子教程,即使它有点老了。 要进行概述,请查看手册页quilt (1): Quilt是一种通过跟踪每个补丁所做的更改来管理大量补丁的工具。补丁可以被应用、不应用、刷新等等。关键的哲学概念是你的主要输出是补丁。使用 quilt,所有工作都在单个目录树中进行。可以从源代码树中的任何位置调用命令。 Quilt 管理一堆补丁。补丁在基础树和所有前面的补丁之上逐步应用。它们可以被推到堆栈顶部(被子推送),也可以从堆栈中弹出(被子弹出)。 命令可用于查询系列文件的内容(被子系列,见下文)、堆栈的内容(已应用的被子、被子上一个、被子顶部)以及在特定时刻未应用的补丁(被子下一个、被子未应用)。默认情况下,大多数命令适用于堆栈中最顶层的补丁。 一个名为的文件series包含一个补丁文件名列表,该列表定义了应用补丁的顺序。除非有可以自动生成系列文件的方法,否则它通常与一组补丁一起提供。在此文件中,每个补丁文件名位于单独的行中。补丁文件由相对于补丁目录的路径名标识;补丁可能位于该目录下的子目录中。系列文件中以井号 (#) 开头的行将被忽略。 当被子添加、删除或重命名补丁时,它会自动更新系列文件。quilt 的用户可以在应用某些补丁时修改系列文件,只要应用的补丁保持其原始顺序即可。可以使用不同的系列文件以不同的方式组装补丁,例如对应于不同的开发分支。 在应用补丁之前(或“推入堆栈”),补丁修改的所有文件的副本都保存到 .pc/patch 目录中。该补丁被添加到当前应用的补丁列表 (.pc/applied-patches)。稍后当重新生成补丁(被子刷新)时,使用 GNU diff 将 .pc/patch 中的备份副本与源树中文件的当前版本进行比较。 总而言之,您可以将补丁添加到名为 series 的文件中,并通过多种方式对其进行管理。您可以添加、删除补丁并获取已应用补丁的列表,...
假设您正在使用 bash/sh/zsh 等...
接受的答案对我不起作用,似乎假设补丁可以在一个命令行上获取多个补丁文件。我的解决方案:
查找:查找补丁文件
排序:对补丁文件进行排序,以便保持顺序(例如 001 在 002 之前)
xargs:使用标准输入作为参数调用补丁
如果
cat
有效,为什么不使用它?使用
find
和xargs
:例子:
这实际上有效(在 Bash 中):
Debian 使用一个非常好的工具被称为quilt来管理它的包。
在 Debian/Ubuntu 上安装它
看看 Shakthi Kannan 的这个非常好的教程:被子教程,即使它有点老了。
要进行概述,请查看手册页
quilt (1)
:总而言之,您可以将补丁添加到名为 series 的文件中,并通过多种方式对其进行管理。您可以添加、删除补丁并获取已应用补丁的列表,...