Get A List Of Files With Specific Extensions In A Single Directory In Rust
Any Extension
pub fn get_files_in_dir(dir: &PathBuf) -> Result<Vec<String>> {
Ok(fs::read_dir(dir)?
.into_iter()
.filter_map(|p| p.ok())
.map(|p| p.path().to_path_buf())
.filter(|p| p.is_file())
.filter_map(|p|
p.file_name().and_then(|name| Some(name.display().to_string()))
)
.filter(|name| !name.starts_with("."))
.collect()
)
}
use std::fs;
use std::path::PathBuf;
fn main() {
let dir = PathBuf::from(".");
let extensions = vec!["txt", "rs"];
let files = get_files_in_dir_with_extensions(&dir, &extensions);
dbg!(files);
}
pub fn get_files_in_dir_with_extensions(dir: &PathBuf, extensions: &Vec<&str>) -> Vec<PathBuf> {
fs::read_dir(dir)
.unwrap()
.into_iter()
.filter(|p| {
if p.as_ref().unwrap().path().is_file() {
true
} else {
false
}
})
.map(|p| p.as_ref().unwrap().path())
.filter(|p| {
!p.file_name().unwrap().to_str().unwrap().starts_with(".")
})
.filter(|p| {
match p.extension() {
Some(ext) => {
extensions.contains(&ext.to_str().unwrap())
},
None => false
}
})
.collect()
}
[_active_nvim_run:8:3] files = [
"./read_first_line.txt",
"./test.rs",
"./og_image.rs",
"./test.txt",
"./alfa.txt",
]