使用 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
)?
我是运行这个命令:
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
)?