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:
[]
= "0.2"
Cargo Features
regex: Enables regex matching for file and directory names, using theregexcrate Enable with:[] = { = "0.2", = ["regex"] }
Usage
Basic Usage
Walk all files and directories in the current directory:
use WalkOptions;
let walker = new.walk;
for path in walker.flatten
Filtering Files
Walk only Rust files (.rs extension):
use WalkOptions;
let walker = new
.files
.extension
.walk;
for path in walker.flatten
Chunking Results
Process files in chunks of 10 for batch operations:
use WalkOptions;
let walker = new
.files
.extension
.walk
.chunks;
for chunk in walker
Regex Matching
Walk files matching a regex pattern (requires the regex feature):
use WalkOptions;
let walker = new
.name_regex
.unwrap
.walk;
for path in walker.flatten
Following Symlinks
Walk directories while following symlinks (with loop protection):
use WalkOptions;
let walker = new
.dirs
.follow_symlink
.walk;
for path in walker.flatten
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.