7 个版本 (3 个稳定版)

1.1.0 2024 年 5 月 30 日
1.0.1 2023 年 7 月 7 日
1.0.0 2023 年 6 月 2 日
0.5.1 2021 年 12 月 30 日
0.1.0 2021 年 12 月 17 日

#179 in 文件系统


用于 nftver

MIT 许可证

250KB
212 代码行

Build Status Crates.io MIT licensed

paq

递归哈希文件或目录。

blake3 密码学哈希算法提供支持。

paq hashing demo

性能

使用了 go 编程语言仓库作为测试用例(478 MB / 12,540 个文件)。

命令 平均值 [ms] 最小值 [ms] 最大值 [ms] 相对
paq./go 116.4 ± 2.6 111.4 120.9 1.00
shell b3sum 132.4 ± 1.5 129.6 135.9 1.14 ± 0.03
dirhash-a sha256./go 642.5 ± 5.8 634.7 649.8 5.52 ± 0.13
shell sha256sum 1583.0 ± 16.3 1568.6 1606.8 13.60 ± 0.33

性能 基准测试 使用 hyperfine

使用 shell 的命令使用了以下命令和多种 <hashsum> 实现

find ./go -type f -print0 | LC_ALL=C sort -z | xargs -0 <hashsum> | <hashsum>

安装

Cargo 安装

安装需要 cargo

从 Crates.io 安装

cargo install paq

从仓库克隆安装

  1. 克隆此仓库。
  2. 从仓库根目录运行 cargo install --path .

预构建的二进制包

  1. 找到适用于计算机操作系统和架构的 最新发布版 .zip 归档。
  2. 下载并解压缩 .zip
  3. 修改解压缩的 paq 二进制文件的权限,允许执行。
  4. paq 移动到系统路径。

用法

命令行界面可执行文件或 Crate 库。

本仓库包含一个示例目录,其中包含一些示例文件、子目录以及一个软链接,用于测试 paq 的功能。

可执行文件

运行 paq [src] 来对源文件或目录进行哈希处理。

将哈希输出到 .paq 文件,格式为有效的 JSON。

如需帮助,运行 paq --help

哈希示例目录

paq ./example

示例目录的路径可以是相对路径或绝对路径。

如果使用了 ---ignore-hidden 标志参数,可能会得到不同的结果。

库文件

paq 添加到 Cargo.toml 中的项目依赖项。

使用库

use paq;

let source = std::path::PathBuf::from("/path/to/source");
let ignore_hidden = true; // .dir or .file
let source_hash: paq::ArrayString<64> = paq::hash_source(&source, ignore_hidden);

println!("{}", source_hash);

哈希示例目录

use paq;

let source = std::path::PathBuf::from("example");
let ignore_hidden = true;
let source_hash: paq::ArrayString<64> = paq::hash_source(&source, ignore_hidden);

assert_eq!(&source_hash[..], "a593d18de8b696c153df9079c662346fafbb555cc4b2bbf5c7e6747e23a24d74");

如果将 ignore_hidden 设置为 false,可能会得到不同的结果。

内容限制

哈希是通过将文件系统内容作为输入数据输入到 blake3 哈希算法中生成的。

按照设计,paq 不将文件系统元数据包括在哈希输入中,例如

  • 文件模式
  • 文件所有权
  • 文件修改和访问时间
  • 文件 ACLs 和扩展属性
  • 硬链接
  • 软链接目标内容(目标路径被哈希处理)

此外,以点或句点开头的文件或目录内容(可选)可以被忽略。

工作原理

  1. 递归获取给定源参数的路径。
  2. 如果路径指向文件,则对每个路径和文件内容进行哈希处理。
  3. 对哈希列表进行排序,以保持一致的顺序。
  4. 通过哈希哈希列表来计算最终的哈希。

许可证

MIT

依赖项

~4–11MB
~122K SLoC