60 releases (breaking)

new 0.103.0 Mar 19, 2025
0.101.0 Dec 22, 2024
0.100.0 Nov 13, 2024
0.96.1 Jul 29, 2024
0.60.0 Mar 22, 2022

#341 in Filesystem

Download history 2730/week @ 2024-11-27 2668/week @ 2024-12-04 3219/week @ 2024-12-11 3091/week @ 2024-12-18 1615/week @ 2024-12-25 2497/week @ 2025-01-01 2847/week @ 2025-01-08 1944/week @ 2025-01-15 2317/week @ 2025-01-22 2542/week @ 2025-01-29 3698/week @ 2025-02-05 2963/week @ 2025-02-12 3429/week @ 2025-02-19 3021/week @ 2025-02-26 4924/week @ 2025-03-05 3494/week @ 2025-03-12

15,371 downloads per month
Used in 100 crates (6 directly)

MIT/Apache and maybe CC-PDDC

1MB
27K SLoC

nu-glob

Support for matching file paths against Unix shell style patterns.

Usage

To use nu-glob, add this to your Cargo.toml:

[dependencies]
nu-glob = "0.60.0"

Examples

Print all jpg files in /media/ and all of its subdirectories.

use nu_nu_glob::glob;

for entry in glob("/media/**/*.jpg").expect("Failed to read glob pattern") {
    match entry {
        Ok(path) => println!("{:?}", path.display()),
        Err(e) => println!("{:?}", e),
    }
}

lib.rs:

Support for matching file paths against Unix shell style patterns.

The glob and glob_with functions allow querying the filesystem for all files that match a particular pattern (similar to the libc glob function). The methods on the Pattern type provide functionality for checking if individual paths match a particular pattern (similar to the libc fnmatch function).

For consistency across platforms, and for Windows support, this module is implemented entirely in Rust rather than deferring to the libc glob/fnmatch functions.

Examples

To print all jpg files in /media/ and all of its subdirectories.

use nu_glob::glob;

for entry in glob("/media/**/*.jpg", None).expect("Failed to read glob pattern") {
    match entry {
        Ok(path) => println!("{:?}", path.display()),
        Err(e) => println!("{:?}", e),
    }
}

To print all files containing the letter "a", case insensitive, in a local directory relative to the current working directory. This ignores errors instead of printing them.

use nu_glob::glob_with;
use nu_glob::MatchOptions;
use nu_protocol::Signals;

let options = MatchOptions {
    case_sensitive: false,
    require_literal_separator: false,
    require_literal_leading_dot: false,
    recursive_match_hidden_dir: true,
};
for entry in glob_with("local/*a*", options, Signals::empty()).unwrap() {
    if let Ok(path) = entry {
        println!("{:?}", path.display())
    }
}

Dependencies

~15–49MB
~703K SLoC