12 个版本

0.1.6 2023 年 10 月 13 日
0.1.5 2023 年 10 月 13 日
0.1.3 2023 年 4 月 21 日
0.0.5 2023 年 4 月 17 日

#401 in 命令行工具

42 每月下载次数

MIT/Apache

105KB
732

biff

Crates.io Code coverage build Linux build Windows build MacOs MIT licensed Apache 2.0 licensed Contributor Covenant

概述

逐字节比较两个文件。

biff 逐字节比较两个文件,如果它们不同,将显示它们不同的第一个字节和行号。另外,当设置选项 -l--verbose 时,biff 将显示所有不同的字节。

biff 还可以跳过比较文件中的某些初始字节,或者只比较请求的字节数。

当比较二进制文件时,如果开始字节与指定的 标记 匹配,biff 可能会检查这些字节,因此只有具有此类标记的文件才会进行比较。

还有一些常见情况,比较的文件只在少数字节上有所不同,但通常可以被视为 相似,这是完全可以接受的。对于此类比较,biff 可以使用可接受的差异绝对总数(选项 -a--absolute)或差异百分比限制(选项 -p--percent)。

这种 相似比较 的最常见用途是从相同的 HTML 文件使用 Headless Chrome 生成的 PDF 文件。

biff 最好的应用场景是输出值为文件的测试用例。

安装

$ cargo install biff

用法

显示 biff 选项的简短描述

$ biff -h

显示 biff 选项的详细描述

$ biff --help

示例

文件相同

$ cat sample1.txt
Lorem ipsum.
$ cat sample2.txt
Lorem ipsum.

$ biff sample1.txt sample2.txt
$ echo $?
0

文件相同,但从第 3 个字节开始

$ cat sample1.txt
LOrem ipsum.
$ cat sample2.txt
MArem ipsum.

$ biff -i 2 sample1.txt sample2.txt
$ echo $?
0

文件相似(差异限制)

$ cat sample1.txt
LoreM ipsum.
$ cat sample2.txt
LoRem ipsuM.

$ biff -a 3 sample1.txt sample2.txt
$ echo $?
0

$ biff -p 26.8 sample1.txt sample2.txt
$ echo $?
0

$ biff -q -p 26.8 sample1.txt sample2.txt
$ echo $?
0

文件不同

$ cat sample1.txt
LoreM ipsum.
$ cat sample2.txt
LoRem ipsuM.

$ biff sample1.txt sample2.txt
sample1.txt sample2.txt differ: byte 3, line 1
$ echo $?
1

$ biff -b sample1.txt sample2.txt
sample1.txt sample2.txt differ: byte 3, line 1 is 114 82
$ echo $?
1

$ biff -bx sample1.txt sample2.txt
sample1.txt sample2.txt differ: byte 3, line 1 is 72 52
$ echo $?
1

$ biff -q sample1.txt sample2.txt
$ echo $?
1

$ biff -l sample1.txt sample2.txt
3    114  82
5    77  109
11   109  77
$ echo $?
1

$ biff -p 0.1 sample1.txt sample2.txt
sample1.txt sample2.txt differ: limit 0.1% exceeded by value 25.000%
$ echo $?
1

$ biff -a 1 sample1.txt sample2.txt
sample1.txt sample2.txt differ: limit 1 exceeded by value 3
$ echo $?
1

许可协议

根据您的选择许可以下任一项

贡献

所有有意提交供工作包含的贡献,将按照上述方式双重授权,不附加任何额外条款或条件。

依赖

~1MB
~16K SLoC