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
| 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). |
§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 theregexcrate 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);
}§Following Symlinks
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
- Walk
Options - Structure encoding the desired walking options
- Walker