#hash #file #data-integrity #catalog #command #detect #order

app rotsniff

一个用于编目文件及其哈希值以检测损坏或丢失文件的工具

3 个不稳定版本

0.2.1 2024年6月20日
0.2.0 2023年12月17日
0.1.0 2023年7月24日

#626 in 命令行工具

Download history 120/week @ 2024-06-16 8/week @ 2024-06-23 22/week @ 2024-06-30

130 每月下载量

MIT 许可证

17KB
317 代码行

rotsniff

rotsniff 是一个用于编目文件及其哈希值以检测损坏或丢失文件的工具。

它受到了 scorch 的启发,并且数据库格式与 数据库 类似,但在此阶段不要期望有任何兼容性。

Usage: rotsniff [OPTIONS] <COMMAND>

Commands:
  append  Add files not found in the database
  remove  Remove entries from the database that no longer exists
  update  Update entries in the database for files that have changed
  verify  Verify that all files in the database are intact, and that all files have entries in the database
  help    Print this message or the help of the given subcommand(s)

Options:
      --db <FILE>            Path to the database file [default: ./rotsniff.db]
  -v, --verbose              Make `command` more verbose. Actual behavior depends on the command
  -f, --fnfilter <FNFILTER>  Restrict commands to files which match regex
  -F, --negate-fnfilter      Negate the fnfilter regex match
  -h, --help                 Print help
  -V, --version              Print version

安装

您可以直接从 crates.io 安装最新标记版本,执行以下命令。

cargo install rotsniff

示例

% mkdir foo
% echo 'Hello, World!' > foo/hello

% rotsniff -v append foo
foo/hello: blake2b:94D8520FE182ADD62BEC85B531A17A779FCD39F23248CFABD18347B86CE9F8B73A0C151DD7CE171843DD8A14E5329DDE6B73149D26D6638E94EF4C634F3F1A7B

% rotsniff -v verify foo
MATCH: foo/hello

% echo 'Goodbye!' > foo/hello

% rotsniff -v verify foo
MODIFIED: foo/hello

% rotsniff -v update
UPDATED: foo/hello

% rm foo/hello
% touch foo/new

% rotsniff -v verify foo
FILE NOT FOUND: foo/hello
NOT FOUND IN DB: foo/new

% rotsniff -v append foo
foo/new: blake2b:786A02F742015903C6C6FD852552D272912F4740E15847618A86E217F71F5419D25E1031AFEE585313896444934EB04B903A685B1448B755D56F701AFE9BE2CE

% rotsniff -v verify foo
FILE NOT FOUND: foo/hello
MATCH: foo/new

% rotsniff -v remove
REMOVED: foo/hello

% rotsniff -v verify foo
MATCH: foo/new

数据库

数据库是一个使用 gzip 压缩的简单 CSV 文本文件,以确保未来兼容性,并方便其他软件在需要时解析。

% rotsniff -v append foo
foo/test: blake2b:7DFDB888AF71EAE0E6A6B751E8E3413D767EF4FA52A7993DAA9EF097F7AA3D949199C113CAA37C94F80CF3B22F7D9D6E4F5DEF4FF927830CFFE4857C34BE3D89
% zcat < rotsniff.db
foo/test,blake2b:7DFDB888AF71EAE0E6A6B751E8E3413D767EF4FA52A7993DAA9EF097F7AA3D949199C113CAA37C94F80CF3B22F7D9D6E4F5DEF4FF927830CFFE4857C34BE3D89

当前格式为 file,hash:digest,但将来可能会增加更多数据。目前唯一支持的哈希函数是 BLAKE2b

依赖项

~6–16MB
~187K SLoC