#hash #folders #compare #blake3 #directories #cli

app ddiff

CLI 实用程序,像超级英雄一样比较目录

1 个不稳定版本

0.1.0 2021 年 2 月 11 日

#30#folders

MIT 许可证

15KB
149

ddiff

Format, Lint & Test Build & Release

一个小工具,用于检查两个文件夹是否相同。

工作原理

ddiff 是一个简单的 Rust 编写的 CLI 二进制文件,它计算两个不同文件夹中每个文件的哈希值,并查找第一个文件夹中有而第二个文件夹中没有的文件,反之亦然,或者路径匹配但内容(哈希)不同的文件。

为什么?

我经常需要检查两个文件夹是否相同(例如,在网络中复制非常重要的文件),由于我对数据完整性非常小心,所以我通常计算两个文件夹中每个文件的哈希值并将它们进行比较。

这很有效,但不容易,不快,当然也不优雅。

我知道有涉及 rsync 的解决方案,但在我看来,它与“天真”/手动方法一样糟糕。

因此,我决定构建一个工具来解决此问题。

安装

  1. 使用 Cargo 安装(需要 Rust 工具链)

    cargo install ddiff
    
  2. 发布页面 下载二进制文件并将其添加到您的 $PATH适用于 Linux 和 macOS 的“x86”

用法

ddiff 0.1.0

USAGE:
    ddiff <path-a> <path-b>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

ARGS:
    <path-a>    
    <path-b>

示例输出

>>> Files with same path but with different hash

    path         hash A                                                            hash B
    file_random  9b53eed45673c3e91f365f66c9138117bc595888bcdc63f907fafdb28cb72bca  49d138ac765678706c3cc84721af69d66dcb91dfaa71b46e469d296e0788b133


>>> Files in testA/ but not in testB

    path      hash testA/  hash testB
    unique_a  16b3a442c222b958453e73cb818a51a060bed10b9bf6649f2bbb43a9e57bff78


>>> Files in testB but not in testA/

    path      hash testB  hash testA/
    unique_b  16b3a442c222b958453e73cb818a51a060bed10b9bf6649f2bbb43a9e57bff78

ddiff checked 6 files, about 28 B, in 17.220658ms

哈希

此工具使用 BLAKE3 哈希算法。

我知道...非加密哈希会更好,但我真的很喜欢加密哈希的性质,并且有一个非常酷的实用程序叫做 b3sum 来验证哈希。它也足够快,不会在几乎任何机器上成为瓶颈,尤其是由于 ddiff 是多线程的(感谢 Rayon

路线图

  • 添加单元测试和更多集成测试
  • 添加基准测试
  • 构建 ARM 二进制文件 重要
  • 改进文档并发布
  • 添加简单的安装脚本
  • 在 Homebrew 和其他包管理器上发布

贡献

可能没有人会阅读这段内容,但如果你偶然来到这里并且想添加一些功能、改进我的代码、建议新的功能,或者更可能的是提交一个问题来解决错误,无论如何,你都可以提交 PR、填写问题或给我发邮件。

我也非常关注现实世界的测试用例和用例场景。请告诉我这个小工具是否对您有帮助,或者您是否有任何改进的想法。

贡献

Git钩子

该仓库有git预提交钩子,用于强制执行良好的格式、代码检查和开发侧的测试(感谢cargo-husky),相同的规则也将应用于GitHub Actions。

常规提交

即使没有通过提交信息钩子强制执行,该仓库也遵循常规提交

持续集成/持续交付

本项目使用GitHub Actions进行CI和构建版本。

感谢出色的action-rs项目。

许可证

本项目受MIT许可证许可。

依赖项

~8–19MB
~243K SLoC