仅包含与递归diff中的给定模式匹配的文件

Edw*_*uza 20 unix shell diff

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

$ diff -r a b
Run Code Online (Sandbox Code Playgroud)

但只能查看名称与给定模式匹配的文件.例如,使用find命令中提供的相同语法,它看起来像:

$ diff -r a b -name "*crazy*"
Run Code Online (Sandbox Code Playgroud)

这将显示a和b中具有相同名称和路径的文件之间的差异,其名称中包含"疯狂".

实际上,我正在寻找与diff中可用的--exclude选项相反的方法.

Fat*_*ror 13

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

find a b -type f ! -name 'crazy' -printf '%f\n' | diff -r a b -X -
Run Code Online (Sandbox Code Playgroud)

-X -diff读取从标准输入模式,并排除任何匹配.这应该工作提供您的文件不具有搞笑字符类似*?在他们的名字.唯一的缺点是你的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
Run Code Online (Sandbox Code Playgroud)

这也是假设非GNU diff-X,我不知道.