在一个Fedora Constantine盒子上工作。我正在递归地查看diff
两个目录以检查源代码的更改。由于项目的设置(在我自己参与该项目之前!* 叹息 ),目录中包含源代码和二进制文件,以及大型二进制数据集。虽然diffing最终在这些目录上工作,但如果我可以忽略二进制文件,可能需要20秒。
据我所知,diff没有“ignore binary file”模式,但有一个ignore参数,它会忽略文件中的正则表达式*。我不知道该怎么写才能忽略二进制文件,不管扩展名是什么。
我正在使用下面的命令,但是它不能忽略二进制文件。有人知道如何修改这个命令来做到这一点吗?
diff -rq dir1 dir2
字符串
6条答案
按热度按时间xlpyo6sf1#
有点作弊,但我用的是:
字符串
这递归地比较dir1和dir2,sed删除二进制文件的行(以“Binary files“开头),然后重定向到输出文件。
oymdgrw72#
可以使用
grep -I
(相当于grep --binary-files=without-match
)作为筛选器来筛选二进制文件。字符串
xcitsw883#
我来到这个(旧)问题寻找类似的东西(与默认apache安装相比,遗留生产服务器上的配置文件)。按照@fearlesstost在评论中的建议,
git
足够轻量级和快速,可能比上面的任何建议都更简单。复制版本1到一个新目录。然后执行:字符串
现在删除此目录中版本1的所有文件,并将版本2复制到该目录中。现在执行:
型
这将显示第一次提交和第二次提交之间的所有差异的Git版本。对于二进制文件,它只会说它们不同。或者,您可以为每个版本创建一个分支,并尝试使用git的合并工具合并它们。
7lrncoxx4#
如果项目中的二进制文件的名称遵循特定的模式(
*.o
,*.so
,...),就像它们通常所做的那样,您可以将这些模式放在一个文件中,并使用-X
(连字符X)指定它。我的
exclude_file
内容字符串
命令:
型
更新:
-x
可以代替-X
,在命令行而不是文件中指定排除模式:型
dojqjjoe5#
使用
find
和file
命令的组合。这需要你在你的目录中对file
命令的输出做一些研究;下面我假设你想diff的文件被报告为asdiff。或者,使用grep -v
过滤掉二进制文件。字符串
因为你可能知道巨大的二进制文件的名称,所以把它们放在一个散列数组中,只有当文件不在散列中时才做diff,就像这样:
型
lh80um4z6#
作为一种粗略的检查,您可以忽略匹配/\0/的文件。