walkthrough 0.1.0

A Rust crate for recursive directory traversal.
Documentation

walkthrough

Crates.io docs.rs CI

A recursive directory iterator for Rust with depth control, symlink loop detection, sorting, and hidden-file filtering.

Usage

use walkthrough::WalkDir;

for entry in WalkDir::new("./my_project").min_depth(1).max_depth(5).skip_hidden(true) {
    match entry {
        Ok(e)  => println!("{}", e.path().display()),
        Err(e) => eprintln!("error: {e}"),
    }
}

Configuration

Method Default Description
min_depth(n) 0 Skip entries shallower than n
max_depth(n) unlimited Skip entries deeper than n
follow_links(bool) false Follow symbolic links
skip_hidden(bool) false Omit dot-files and dot-directories
group_dir(bool) false Yield directories before files at each level
sort_by(fn) none Custom comparator for entries within a directory

Sorting example

use walkthrough::WalkDir;

let walker = WalkDir::new(".")
    .group_dir(true)
    .sort_by(|a, b| a.file_name().cmp(b.file_name()));

How it works

The walker maintains a stack of open directory iterators. Each directory is read, optionally sorted, and pushed onto the stack. On backtracking the stack is popped, keeping memory proportional to the depth of the tree rather than its total size.

Symlink loop detection compares device/inode identifiers (or equivalent) of every ancestor in the current path. A loop is reported as an error and traversal continues.

Development

just is used to run common tasks:

just fmt              # check formatting
just clippy           # run linter
just test             # run all tests
just ci               # full CI suite

Roadmap

  • Async support (tokio / async-std)

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.