| Crates.io | fs-walk |
| lib.rs | fs-walk |
| version | 0.2.2 |
| created_at | 2024-09-04 21:13:56.096121+00 |
| updated_at | 2026-01-14 16:36:04.484241+00 |
| description | File-system walking crate |
| homepage | |
| repository | https://github.com/qjerome/fs-walk |
| max_upload_size | |
| id | 1363812 |
| size | 76,169 |
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.
fs_walk?| Feature | Description |
|---|---|
| Depth control | Limit traversal depth to avoid unnecessary work. |
| Result chunking | Process results in batches for memory efficiency. |
| Filtering | Filter by extension, name, regex, or custom predicates. |
| Symlink support | Optionally follow symlinks with loop protection. |
| Sorting | Sort directory entries for consistent results. |
| Regex matching | Enable regex-based filtering (requires the regex feature). |
Add fs_walk to your Cargo.toml:
[dependencies]
fs_walk = "0.2"
regex: Enables regex matching for file and directory names, using the regex crate
Enable with:
[dependencies]
fs_walk = { version = "0.2", features = ["regex"] }
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);
}
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);
}
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);
}
}
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);
}
Contributions are welcome! If you’d like to report a bug, suggest a feature, or submit a PR.
This project is licensed under the GPL-3 License.