tools/fs: add scan_subdir helper

This filters the results of read_subdir with a regex.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
Wolfgang Bumiller 2019-02-12 14:20:16 +01:00
parent b4d5787de9
commit a25f863afd

View File

@ -35,3 +35,29 @@ pub fn read_subdir<P: ?Sized + nix::NixPath>(dirfd: RawFd, path: &P) -> Result<R
}); });
Ok(ReadDir { iter }) Ok(ReadDir { iter })
} }
/// Scan through a directory with a regular expression. This is simply a shortcut filtering the
/// results of `read_subdir`. Non-UTF8 comaptible file names are silently ignored.
pub fn scan_subdir<'a, P: ?Sized + nix::NixPath>(
dirfd: RawFd,
path: &P,
regex: &'a regex::Regex,
) -> Result<impl Iterator<Item = Result<nix::dir::Entry, Error>> + 'a, Error> {
Ok(read_subdir(dirfd, path)?.filter_map(move |entry| {
match entry {
Ok(entry) => match entry.file_name().to_str() {
Ok(name) => {
if regex.is_match(name) {
Some(Ok(entry))
} else {
None // Skip values not matching the regex
}
}
// Skip values which aren't valid utf-8
Err(_) => None,
},
// Propagate errors through
Err(e) => Some(Err(Error::from(e))),
}
}))
}