加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:07:45 所属栏目:安全 来源:网络整理
导读:如何在两个目录(a和b)中执行文件的递归差异: $ diff -r a b 但只查看名称与给定模式匹配的文件。例如,使用find命令中可用的相同语法,它将如下所示: $ diff -r a b -name "*crazy*" 这将在a和b中具有相同名称和路径的文件之间显示差异,其名称中“疯狂”
如何在两个目录(a和b)中执行文件的递归差异:
$ diff -r a b

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

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

这将在a和b中具有相同名称和路径的文件之间显示差异,其名称中“疯狂”。

有效地,我正在寻找与可用的差异的–exclude选项的相反。

也许这有点间接,但它应该是工作。您可以使用find获取与该模式不匹配的文件列表,然后“排除”所有这些文件:
find a b -type f ! -name 'crazy' -printf '%fn' | diff -r a b -X -

-X – 将使diff从stdin读取模式,并排除匹配的任何内容。这应该工作,只要你的文件没有像*或?在他们的名字。唯一的缺点是,您的diff不会包含find命令,因此列出的diff命令不是有用的。

(我只用GNU find和diff进行测试)。

编辑:

由于只有非GNU find不具有-printf,所以可以使用sed作为替代:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读