Simple recursive directory traversal.
Traverse directories recursively and conditionally using iterators.
```rust fn main() { use recvdir::RecursiveDirIterator; let dir = RecursiveDirIterator::fromroot("test_dir").unwrap();
for entry in dir {
println!("{:?}", entry);
}
} ```
```rust fn main() { use std::path::Path; use recvdir::RecursiveDirIterator; let dir = RecursiveDirIterator::withclosurefilter("testdir", |dir: &Path| !dir.is_symlink()).unwrap();
for entry in dir {
println!("{:?}", entry);
}
} ```
Visits only the files in test_dir
:
```rust fn main() { use std::path::{Path, PathBuf}; use recvdir::RecursiveDirIterator; let root = PathBuf::from("testdir"); let ancestors = root.ancestors().count(); let dir = RecursiveDirIterator::withclosurefilter(root, |dir: &Path| dir.ancestors().count() - ancestors <= 1).unwrap();
for entry in dir {
println!("{:?}", entry);
}
} ```
Visits the files in test_dir
and in first-level subdirectories:
```rust fn main() { use std::path::{Path, PathBuf}; use recvdir::RecursiveDirIterator; let root = PathBuf::from("testdir"); let ancestors = root.ancestors().count(); let dir = RecursiveDirIterator::withclosurefilter(root, |dir: &Path| dir.ancestors().count() - ancestors <= 2).unwrap();
for entry in dir {
println!("{:?}", entry);
}
} ```
You can also compose the filters:
```rust fn main() { use std::num::NonZeroUsize; use std::path::{Path, PathBuf}; use recvdir::{Filter, MaxDepth, NoSymlink, RecursiveDirIterator}; let root = PathBuf::from("testdir"); let dir = RecursiveDirIterator::with_filter( &root, NoSymlink.and(MaxDepth::new(&root, NonZeroUsize::new(2).unwrap())), ).unwrap();
for entry in dir {
println!("{:?}", entry);
}
} ```
Read the documentation for more information