cmp 比 diff -q 快吗?

mur*_*uru 11 performance diff

在最近关于检查某些文件是否具有不同内容的 Ask Ubuntu 问题中,我看到一条评论指出,如果不同的部分无关紧要,cmp将比diff. 这个堆栈溢出答案同意,给出了cmp将在第一个不同字节处停止的原因。但是,GNUdiff-q(or --brief) 标志,它应该使它report only when files differ. diff一旦发现任何差异,GNU也将停止比较似乎是合乎逻辑的(例如grep在指定-l或时在第一个匹配之后停止搜索-q)。

cmp真正的速度比diff -q,在Linux系统的背景下,这可能有GNU版本?

mur*_*uru 13

在@josten 的提示下,我对两者进行了比较。代码在GitHub 上。简而言之:

用户系统

真实的

在大多数情况下,User+Sys 所用的时间cmp -s似乎比 稍多一点diff。然而,实时拍摄几乎是任意的——cmp在某些方面diff领先,在某些方面领先。

总结:
性能上的任何差异纯属巧合。随意使用。


Gil*_*il' 6

使用来自Anthon 的类似但更大的文件(100M 行,仅在最后一个有所不同):

yes | head -n 100000000 >aa
sed '$ s/d/e/' >ab
Run Code Online (Sandbox Code Playgroud)

我得到了无法区分的时间diff -qcmp -s

/tmp% time diff -q aa ab
Files aa and ab differ
diff -q aa ab  0.04s user 0.33s system 99% cpu 0.370 total
/tmp% time cmp -s aa ab
cmp -s aa ab  0.04s user 0.36s system 99% cpu 0.403 total
Run Code Online (Sandbox Code Playgroud)

cmp比 慢cmp -s。据推测,计算行号是一个很大的负担。

/tmp% time cmp aa ab
aa ab differ: char 499999999, line 100000000
cmp aa ab  0.84s user 0.36s system 97% cpu 1.225 total
Run Code Online (Sandbox Code Playgroud)

这是在 Debian wheezy amd64 上,全部从 RAM 运行(在 tmpfs 上)。

cmp -s 具有被所有 POSIX 平台和 BusyBox 支持的优势。