Thanks to visit codestin.com
Credit goes to docs.rs

Crate fs_walk

Crate fs_walk 

Source
Expand description

fs_walk is a Rust crate for efficiently and flexibly walking the filesystem. It provides a simple, ergonomic API for recursively traversing directories with fine-grained control over filtering, sorting, and symlink handling.

§Why Use fs_walk?

  • Flexible filtering: Filter by file extension, name, regex, or custom predicates.
  • Batch processing: Process files in chunks for memory efficiency.
  • Symlink handling: Safely follow symlinks with loop protection.
  • Ergonomic API: Chainable methods for intuitive configuration.

§Features

FeatureDescription
Depth controlLimit traversal depth to avoid unnecessary work.
Result chunkingProcess results in batches for memory efficiency.
FilteringFilter by extension, name, regex, or custom predicates.
Symlink supportOptionally follow symlinks with loop protection.
SortingSort directory entries for consistent results.
Regex matchingEnable regex-based filtering (requires the regex feature).

§Installation

Add fs_walk to your Cargo.toml:

[dependencies]
fs_walk = "0.2"

§Cargo Features

  • regex: Enables regex matching for file and directory names, using the regex crate Enable with:
    [dependencies]
    fs_walk = { version = "0.2", features = ["regex"] }

§Usage

§Basic Usage

Walk all files and directories in the current directory:

use fs_walk::WalkOptions;

let walker = WalkOptions::new().walk(".");
for path in walker.flatten() {
    println!("Found: {:?}", path);
}

§Filtering Files

Walk only Rust files (.rs extension):

use fs_walk::WalkOptions;

let walker = WalkOptions::new()
    .files()
    .extension("rs")
    .walk(".");
for path in walker.flatten() {
    println!("Found Rust file: {:?}", path);
}

§Chunking Results

Process files in chunks of 10 for batch operations:

use fs_walk::WalkOptions;

let walker = WalkOptions::new()
    .files()
    .extension("o")
    .walk(".")
    .chunks(10);
for chunk in walker {
    for path in chunk.iter().flatten() {
        println!("Processing: {:?}", path);
    }
}

§Regex Matching

Walk files matching a regex pattern (requires the regex feature):

use fs_walk::WalkOptions;

let walker = WalkOptions::new()
    .name_regex(r#"^.*\.rs$"#)
    .unwrap()
    .walk(".");
for path in walker.flatten() {
    println!("Found matching file: {:?}", path);
}

Walk directories while following symlinks (with loop protection):

use fs_walk::WalkOptions;

let walker = WalkOptions::new()
    .dirs()
    .follow_symlink()
    .walk(".");
for path in walker.flatten() {
    println!("Found directory: {:?}", path);
}

§Contributing

Contributions are welcome! If you’d like to report a bug, suggest a feature, or submit a PR.

§License

This project is licensed under the GPL-3 License.

Structs§

Chunks
WalkOptions
Structure encoding the desired walking options
Walker