AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 102324
Accepted
styts
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 5 个回答
  • 29848 Views

5 个回答

  • Voted
  1. 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
    
    • 20
  2. 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 的参数告诉它参数将是补丁文件
    • 10
  3. 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
    
    • 3
  4. 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
    
    • 2
  5. 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 的文件中,并通过多种方式对其进行管理。您可以添加、删除补丁并获取已应用补丁的列表,...

    • 0

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • crontab ifconfig 什么都不输出

  • 使用命令行工具按排序顺序计算重复项

  • 是否有 bash 等效于 ruby​​ 的“一些内容#{foo}”?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve