1 个不稳定版本

0.1.0 2023年2月18日

#1304文件系统

每月24次下载
用于 brush-shell

Apache-2.0

44KB
945

dir-cmp

这个 Rust 库旨在提供方便的函数来比较两个文件树。

用法

    //define options
    let diff_options = Options {
        ignore_left_only: false,
        ignore_right_only: false,
        filter: None,
        ignore_equal: false,
        recursive: true,
    };

    //get dirs to compare
    let left_dir = Path::new("./foo");
    let right_dir = Path::new("./bar");

    //compare
    let result = compare_dirs(&left_dir, &right_dir, diff_options);

过滤器

为了黑名单(exclude)或白名单(include)任何文件夹或文件名,可以在比较选项中添加一个过滤器。过滤器由一系列正则表达式组成。

    // define filter to ignore ".git" directory
    let regex = Regex::new(r"\.git$").unwrap();
    let filter = Filter::Exclude(vec![regex]);
    
    //define options
    let diff_options = Options {
        ignore_left_only: false,
        ignore_right_only: false,
        filter: Some(filter),
        ignore_equal: false,
        recursive: true,
    };

    //get dirs to compare
    let left_dir = Path::new("./foo");
    let right_dir = Path::new("./bar");

    //compare
    let result = compare_dirs(&left_dir, &right_dir, diff_options);

完整版与轻量版

compare_dirs 函数实现了两种版本:完整版和轻量版。区别在于 full::compare_dirs 还比较文件内容,而 light::compare_dirs 只比较名称/路径。

命令行界面

可以使用此仓库中提供的命令行界面测试库。它受 diff 启发,但只覆盖基本功能。

用法

    dir-cmp -h
    dir-cmp -r <LEFT> <RIGHT>

性能

为了评估此库的速度,我们可以将其与 diff 进行比较。

一种简单的方法是简单地将此仓库与自身进行比较

    time diff -r . . 
        // 0.01s user 0.19s system 99% cpu 0.209 total
    time dir-cmp -r . . 
        // 0.26s user 0.46s system 75% cpu 0.945 total

结果清楚地表明,还有很多改进的空间。

依赖项

~4.5–6.5MB
~109K SLoC