使用 diff 比较目录时,有没有办法从输出中排除某些文件差异?

When comparing directories with diff is there a way to exclude certain file differences from the output?

我是运行这个命令:

diff --recursive a.git b.git

它显示了一些与我无关的文件的差异。有没有办法让它不显示以以下结尾的行:

 ".xaml.g.cs"

或起始于:

的行
 "Binary files"

或包含此文本的行:

".git/objects"

一种简单但有效的方法是将输出通过管道传输到 grep。使用 grep -Ev 您可以使用正则表达式忽略行。

diff --recursive a.git b.git | grep -Ev "^< .xaml.g.cs|^> .xaml.g.cs"  | grep -Ev "Binary files$" | grep -v ".git/objects"

这将忽略所有具有匹配文本的行。至于正则表达式:^表示行开始于,$表示行结束于。但至少对于 ^,您必须将其调整为 diff 输出(其中行通常以 <> 开头)。

另请注意,diff 提供了一个标志 --ignore-matching-lines=RE,但它可能无法像您预期的那样工作 mentioned in this question/answer。因为它不像我期望的那样工作,所以我宁愿使用 grep 进行过滤。

man diff

给出以下示例:

   ...
   -x, --exclude=PAT
          exclude files that match PAT

   -X, --exclude-from=FILE
          exclude files that match any pattern in FILE
   ...

您是否尝试过使用这些开关(例如 diff -x=".xaml.g.cs" --recursive a.git b.git)?