gpt4 book ai didi

shell - 仅包含与递归差异中给定模式匹配的文件

转载 作者:行者123 更新时间:2023-12-02 23:17:37 25 4
gpt4 key购买 nike

如何对两个目录(a 和 b)中的文件执行递归比较:

$ diff -r a b

但仅查看名称与给定模式匹配的文件。例如,使用 find 命令中可用的相同语法,如下所示:

$ diff -r a b -name "*crazy*"

这将显示 a 和 b 中具有相同名称和路径的文件之间的差异,这些文件的名称中包含“crazy”。

实际上,我正在寻找 diff 中可用的 --exclude 选项的相反内容。

最佳答案

也许这有点间接,但它应该有效。您可以使用 find 获取与模式匹配的文件列表,然后“排除”所有这些文件:

find a b -type f ! -name 'crazy' -printf '%f\n' | diff -r a b -X -

-X - 将使 diff 从 stdin 读取模式并排除任何匹配的内容。如果您的文件名称中没有诸如 *? 之类的有趣字符,这应该可以工作。唯一的缺点是您的 diff 不会包含 find 命令,因此列出的 diff 命令没有那么有用。

(我仅使用 GNU finddiff 对其进行了测试)。

编辑:

由于只有非 GNU find 没有 -printf,因此 sed 可以用作替代方案:

find a b -type f ! -name '*crazy*' -print | sed -e 's|.*/||' | diff -X - -r a b

这还假设非 GNU diff 具有我不知道的 -X

关于shell - 仅包含与递归差异中给定模式匹配的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10131908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com