将目录与diff比较时,是否有一种方法可以从输出中排除某些文件差异?

时间:2019-05-06 09:30:33

标签: linux unix diff

我正在运行以下命令:

diff --recursive a.git b.git

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

 ".xaml.g.cs"

或以以下内容开头的行:

 "Binary files"

或其中包含该文本的行:

".git/objects"

2 个答案:

答案 0 :(得分:2)

一种简单但有效的方法是将输出通过管道传递到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进行过滤。

答案 1 :(得分:1)

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)?