在目录比较时忽略文件中特定行的自动化方法
我需要比较两个文件夹,并生成一些结构化的输出(文本文件就可以),显示它们之间的不同。也就是说,输出可能看起来像这样:
file1 exists only in directory2
file2 exists only in directory1
file3 is different between directory1 and directory2
我对格式不太在意,只要信息能显示出来就行。第二个要求是,我需要在比较两个文件时,能够忽略某些特定的字符序列。Araxis Merge这个工具就有这个功能:你可以输入一个正则表达式(Regex),任何仅在匹配这个正则的字符序列上有差异的文件都会被报告为相同。
这使得Araxis Merge看起来是个不错的选择,但到目前为止,我还没有找到任何方法可以生成差异的结构化输出。即使我用命令行参数启动consolecompare.exe,它也只是打开一个Araxis的图形界面窗口,显示差异。
所以,以下两种情况有没有存在呢?
- 有没有办法让Araxis Merge把差异结果打印到一个文本文件里?
- 有没有其他工具可以在忽略某些字符序列的情况下进行比较,并生成结构化的输出?
如果有这样的工具作为Python的模块或插件,那就更好了。请记住,这一切必须完全通过命令行或Python脚本来完成——不使用图形界面。
1 个回答
1
在某种程度上,普通的 diff
命令可以做到这一点,也就是比较文件夹里的内容,并且忽略那些符合特定规则的变化(使用 -I
选项)。
来自 man bash 的说明:
-I regexp
Ignore changes that just insert or delete lines that match regexp.
快速演示:
[me@home]$ diff images/ images2
Only in images2: x
Only in images/: y
diff images/z images2/z
1c1
< zzz
---
> zzzyy2
[me@home]$ # a less verbose version
[me@home]$ diff -q images/ images2
Only in images2: x
Only in images/: y
Files images/z and images2/z differ
[me@home]$ # ignore diffs on lines that contain "zzz"
[me@home]$ diff -q -I ".*zzz.*" images/ images2/
Only in images2/: x
Only in images/: y