我可以通过一个文件与另一个文件的差异来获得一定百分比吗?

时间:2009-08-10 12:31:29

标签: unix diff

我正在递归地传播一堆二进制文件。

基本上,我正在跑步:

diff --recursive --brief dir_a dir_b

这告诉我哪些文件不同,哪些只存在于其中一个位置。

我想获得更多信息,粗略地说,它们彼此有多少不同。百分比可以。

有没有简单,单一,相对快速的方法来做到这一点?

关于指标

所以,大多数响应者都想知道我是如何计算百分比的,答案非常多,我不在乎。我正在考虑两个文件的复合大小的差异大小的行。但是,如果那里有其他使用不同指标的东西,我就会接受它。我只需要一个粗略的价值。

git倾向于为提交显示某种差异百分比,任何想法指标会在这里?

5 个答案:

答案 0 :(得分:1)

由于您正在分叉二进制文件,diffdiffstat不是很有用。 “差异”的概念也不像面向行的文本文件那样清晰。

一个想法是使用二元差异工具(如bsdiffxdelta)生成零压缩的二进制补丁,然后将补丁的大小与原始大小进行比较。

答案 1 :(得分:1)

我猜这个脚本会打印某种百分比。

#!/bin/sh

file1="$1"
file2="$2"

file1size=$( cat $file1 | wc -c )
file2size=$( cat $file2 | wc -c )

if [ $file1size -lt $file2size ]; then
    size=$file1size
else
    size=$file2size
fi

dc -e "
3k
$( cmp -n $size -l $file1 $file2 | wc -l )
$size
/
100*
p"

答案 2 :(得分:0)

我不确定您希望如何衡量百分比。但是,您可以编写一个脚本来读取diff命令的输出,并以某种方式计算百分比。但首先您需要知道要使用的指标。​​

答案 3 :(得分:0)

查找程序“diffstat”。它会给你一个更好的主意。

答案 4 :(得分:0)

不完全确定如何定义“多少不同”,但您可以计算每个目录中的项目数并除以总计以获得百分比

# diff -r /tmp /home | awk -F":" '{_[$1]++}END{for(i in _) print _[i],i}'
74 Only in /tmp
29 Only in /home

以上只是打印出数字。自己定义一个指标。